From 7a201eec2a4284743386cc0c2d03eefa9e7cd1d7 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 24 七月 2026 16:00:44 +0800
Subject: [PATCH] update

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitAreaServiceImpl.java     |    4 ++++
 ruoyi-ui/src/views/visitor-admin/record/detail.vue                                        |    4 +++-
 ruoyi-system/src/main/resources/mapper/system/SysVisitAreaMapper.xml                      |   10 ++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysVisitAreaMapper.java                |    2 ++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitorRecordServiceImpl.java |   34 +++++++++++++++++++++++++++++++++-
 5 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysVisitAreaMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysVisitAreaMapper.java
index bbe754a..199d57c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysVisitAreaMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysVisitAreaMapper.java
@@ -35,5 +35,7 @@
     public int updateChildrenAncestors(@Param("areaId") Long areaId, @Param("oldAncestors") String oldAncestors,
                                        @Param("newAncestors") String newAncestors);
 
+    public int countChildrenByParentIds(@Param("parentIds") List<Long> parentIds);
+
     public int deleteByIds(@Param("areaIds") List<Long> areaIds, @Param("updateBy") String updateBy);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitAreaServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitAreaServiceImpl.java
index 810c3fa..493f77f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitAreaServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitAreaServiceImpl.java
@@ -138,6 +138,10 @@
         {
             getRequiredAreaId(areaId);
         }
+        if (visitAreaMapper.countChildrenByParentIds(request.getAreaIds()) > 0)
+        {
+            throw new ServiceException("存在下级区域");
+        }
         return visitAreaMapper.deleteByIds(request.getAreaIds(), username);
     }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitorRecordServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitorRecordServiceImpl.java
index 26dc617..3d3f1fc 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitorRecordServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitorRecordServiceImpl.java
@@ -7,6 +7,8 @@
 import com.ruoyi.system.dto.SysVisitorRecordDeleteRequest;
 import com.ruoyi.system.dto.SysVisitorRecordDetailRequest;
 import com.ruoyi.system.dto.SysVisitorRecordPageRequest;
+import com.ruoyi.system.domain.SysVisitArea;
+import com.ruoyi.system.mapper.SysVisitAreaMapper;
 import com.ruoyi.system.mapper.SysVisitorRecordMapper;
 import com.ruoyi.system.service.ISysVisitorRecordService;
 import com.ruoyi.system.vo.SysVisitorRecordDetailVO;
@@ -33,6 +35,9 @@
 {
     @Autowired
     private SysVisitorRecordMapper visitorRecordMapper;
+
+    @Autowired
+    private SysVisitAreaMapper visitAreaMapper;
 
     @Override
     public PageInfo<SysVisitorRecordVO> pageList(SysVisitorRecordPageRequest request)
@@ -94,17 +99,44 @@
 
     private void fillDetailDisplayFields(SysVisitorRecordDetailVO detail)
     {
+        List<String> visitAreaNames = resolveVisitAreaNames(detail);
         detail.setIdCardMask(maskIdCard(detail.getIdCard()));
         detail.setRegisterTypeName(registerTypeName(detail.getRegisterType()));
         detail.setStatusName(statusName(detail.getStatus()));
         detail.setReceiverVerifyMethodName(verifyMethodName(detail.getReceiverVerifyMethod()));
         detail.setSignVerifyMethodName(verifyMethodName(detail.getSignVerifyMethod()));
-        detail.setVisitAreaNameList(splitNames(detail.getVisitAreaNames()));
+        detail.setVisitAreaNameList(visitAreaNames);
+        detail.setVisitAreaNames(String.join(",", visitAreaNames));
         detail.setValidTimeText(validTimeText(detail.getValidStartTime(), detail.getValidEndTime()));
         detail.setRegisterCollectTime(detail.getRegisterTime());
         detail.setSignCollectTime(detail.getSignTime());
     }
 
+    private List<String> resolveVisitAreaNames(SysVisitorRecordDetailVO detail)
+    {
+        List<String> names = splitNames(detail.getVisitAreaNames());
+        if (!names.isEmpty() || StringUtils.isBlank(detail.getVisitAreaIds()))
+        {
+            return names;
+        }
+        for (String areaIdText : detail.getVisitAreaIds().split(","))
+        {
+            try
+            {
+                SysVisitArea area = visitAreaMapper.selectById(Long.valueOf(StringUtils.trim(areaIdText)));
+                if (area != null && StringUtils.isNotBlank(area.getAreaName()))
+                {
+                    names.add(area.getAreaName());
+                }
+            }
+            catch (NumberFormatException ignored)
+            {
+                continue;
+            }
+        }
+        return names;
+    }
+
     private String maskIdCard(String idCard)
     {
         if (StringUtils.isBlank(idCard) || idCard.length() <= 10)
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysVisitAreaMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysVisitAreaMapper.xml
index 0ff1cf3..8931ba5 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysVisitAreaMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysVisitAreaMapper.xml
@@ -147,6 +147,16 @@
           and find_in_set(#{areaId}, ancestors)
     </update>
 
+    <select id="countChildrenByParentIds" resultType="int">
+        select count(1)
+        from t_visit_area
+        where del_flag = '0'
+          and parent_id in
+          <foreach collection="parentIds" item="parentId" open="(" separator="," close=")">
+              #{parentId}
+          </foreach>
+    </select>
+
     <update id="deleteByIds">
         update t_visit_area
         set del_flag = '1',
diff --git a/ruoyi-ui/src/views/visitor-admin/record/detail.vue b/ruoyi-ui/src/views/visitor-admin/record/detail.vue
index c1f0881..ddb220a 100644
--- a/ruoyi-ui/src/views/visitor-admin/record/detail.vue
+++ b/ruoyi-ui/src/views/visitor-admin/record/detail.vue
@@ -125,7 +125,9 @@
   computed: {
     // 目的:把详情访问区域拆成标签数组,适配中英文逗号和数组格式。
     visitAreaTags() {
-      const value = this.detail.visitAreaNames
+      const value = this.detail.visitAreaNameList && this.detail.visitAreaNameList.length
+        ? this.detail.visitAreaNameList
+        : this.detail.visitAreaNames
       if (Array.isArray(value)) {
         return value.map(item => String(item || '').trim()).filter(Boolean)
       }

--
Gitblit v1.7.1