From 15ecc3b6fa9a5ae69f3ec169ae45699a4cd0ea20 Mon Sep 17 00:00:00 2001
From: wenminjie <1036699586@qq.com>
Date: 星期二, 21 七月 2026 10:31:16 +0800
Subject: [PATCH] 访客机侧代码

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordController.java |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 55 insertions(+), 1 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordController.java
index ff434d4..d8b3afc 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordController.java
@@ -15,6 +15,7 @@
 import com.ruoyi.system.domain.SysVisitArea;
 import com.ruoyi.system.domain.SysVisitorRecord;
 import com.ruoyi.system.domain.vo.AreasList;
+import com.ruoyi.system.dto.SysVisitAreaTreeRequest;
 import com.ruoyi.system.dto.SysVisitorIdCardOutRequest;
 import com.ruoyi.system.dto.SysVisitorRecordAddRequest;
 import com.ruoyi.system.mapper.EmployeeMapper;
@@ -22,12 +23,14 @@
 import com.ruoyi.system.mapper.SysVisitAreaMapper;
 import com.ruoyi.system.mapper.SysVisitorRecordMapper;
 import com.ruoyi.system.service.ISysVisitAreaService;
+import com.ruoyi.system.vo.SysVisitAreaVO;
 import com.ruoyi.web.controller.service.SysVisitorRecordService;
 import com.ruoyi.web.controller.service.VisitorRegisterSyncService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -55,6 +58,7 @@
 
     @PostMapping("/add")
     @ApiOperation(value = "访客登记", notes = "现场访客登记")
+    @Transactional(rollbackFor = Exception.class)
     public AjaxResult add(
             @RequestBody
             @ApiParam(value = "访客登记信息", required = true)
@@ -106,6 +110,9 @@
         BeanUtils.copyProperties(request, record);
 
         //查询地区
+        List<AreasList> areasList = null;
+
+        //查询地区
         if (StringUtils.isNotEmpty(record.getVisitAreaIds())) {
             String[] visitAreaIds = record.getVisitAreaIds().split(",");
             String visitArea = Arrays.stream(visitAreaIds)
@@ -117,7 +124,7 @@
                     .collect(Collectors.joining(","));
 
             // ====== 新增:构建 areas 数组 ======
-            List<AreasList> areasList = Arrays.stream(visitAreaIds)
+            areasList = Arrays.stream(visitAreaIds)
                     .map(String::trim)
                     .filter(StringUtils::isNotEmpty)
                     .map(id -> {
@@ -141,6 +148,52 @@
             if (StringUtils.isNotEmpty(visitArea)) {
                 record.setVisitAreaNames(visitArea);
                 record.setRemark("来访中,允许访问区域:" + visitArea);
+            }
+        }
+// 如果 visitAreaIds 为空,但 visitAreaNames 不为空,根据名称查询填充 visitAreaIds
+        else if (StringUtils.isNotEmpty(record.getVisitAreaNames())) {
+            String[] visitAreaNames = record.getVisitAreaNames().split(",");
+
+            // 根据区域名称查询对应的ID,构建ID字符串
+            String visitAreaIdsStr = Arrays.stream(visitAreaNames)
+                    .map(String::trim)
+                    .filter(StringUtils::isNotEmpty)
+                    .map(name -> {
+                        // 根据区域名称查询区域信息(这里假设您有根据名称查询的方法)
+                        SysVisitAreaTreeRequest query = new SysVisitAreaTreeRequest();
+                        query.setAreaName(name);
+                        List<SysVisitAreaVO> area = sysVisitAreaMapper.selectAreaTreeList(query);
+                        return area != null ? String.valueOf(area.get(0).getAreaId()) : null;
+                    })
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.joining(","));
+
+            if (StringUtils.isNotEmpty(visitAreaIdsStr)) {
+                record.setVisitAreaIds(visitAreaIdsStr);
+            }
+
+            // 同时构建 areas 数组
+            areasList = Arrays.stream(visitAreaNames)
+                    .map(String::trim)
+                    .filter(StringUtils::isNotEmpty)
+                    .map(name -> {
+                        SysVisitAreaTreeRequest query = new SysVisitAreaTreeRequest();
+                        query.setAreaName(name);
+                        List<SysVisitAreaVO> area = sysVisitAreaMapper.selectAreaTreeList(query);
+                        if (area == null || area.isEmpty()) {
+                            return null;
+                        }
+                        AreasList areas = new AreasList();
+                        areas.setAreaCode(area.get(0).getAreaCode());
+                        areas.setAreaName(area.get(0).getAreaName());
+                        return areas;
+                    })
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toList());
+
+            if (!areasList.isEmpty()) {
+                record.setAreasList(areasList);
+                record.setRemark("来访中,允许访问区域:" + record.getVisitAreaNames());
             }
         }
 
@@ -200,6 +253,7 @@
 
     @PostMapping("/idCardSingOut")
     @ApiOperation(value = "访客身份证签离", notes = "访客身份证签离")
+    @Transactional(rollbackFor = Exception.class)
     public AjaxResult idCardSingOut(
             @RequestBody
             @ApiParam(value = "访客身份证签离", required = true)

--
Gitblit v1.7.1