From edccaca25b8b6bdb582c60cbd2983bc05a4e1ff3 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 13 七月 2026 09:42:57 +0800
Subject: [PATCH] update
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysVisitorRecordServiceImpl.java | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 180 insertions(+), 0 deletions(-)
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 ccb4e51..98fe869 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
@@ -2,6 +2,7 @@
import com.ruoyi.common.basic.PageInfo;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.dto.SysVisitorRecordDeleteRequest;
import com.ruoyi.system.dto.SysVisitorRecordDetailRequest;
@@ -12,8 +13,14 @@
import com.ruoyi.system.vo.SysVisitorRecordVO;
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.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.Date;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -30,11 +37,15 @@
@Override
public PageInfo<SysVisitorRecordVO> pageList(SysVisitorRecordPageRequest request)
{
+ refreshVisitorStatus();
SysVisitorRecordPageRequest query = request == null ? new SysVisitorRecordPageRequest() : request;
query.setIntervieweeName(StringUtils.trim(query.getIntervieweeName()));
+ query.setIntervieweeKeyword(StringUtils.trim(query.getIntervieweeKeyword()));
query.setIntervieweeDept(StringUtils.trim(query.getIntervieweeDept()));
+ query.setVisitAreaKeyword(StringUtils.trim(query.getVisitAreaKeyword()));
query.setStatus(StringUtils.trim(query.getStatus()));
query.setVisitorName(StringUtils.trim(query.getVisitorName()));
+ query.setVisitorKeyword(StringUtils.trim(query.getVisitorKeyword()));
query.setVisitReason(StringUtils.trim(query.getVisitReason()));
query.setRegisterType(StringUtils.trim(query.getRegisterType()));
PageInfo<SysVisitorRecordVO> pageInfo = new PageInfo<SysVisitorRecordVO>(query.getPageNum(), query.getPageSize());
@@ -46,6 +57,7 @@
@Override
public SysVisitorRecordDetailVO detail(SysVisitorRecordDetailRequest request)
{
+ refreshVisitorStatus();
Long recordId = getRequiredRecordId(request == null ? null : request.getRecordId());
SysVisitorRecordDetailVO detail = visitorRecordMapper.selectDetailById(recordId);
if (detail == null)
@@ -53,7 +65,18 @@
throw new ServiceException("访客登记记录不存在");
}
detail.setPassRecords(visitorRecordMapper.selectPassRecordsByRecordId(recordId));
+ fillDetailDisplayFields(detail);
return detail;
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public int refreshVisitorStatus()
+ {
+ Date now = new Date();
+ int autoSignedOutRows = visitorRecordMapper.updateExpiredToAutoSignedOut(now);
+ int overdueRows = visitorRecordMapper.updateVisitingToOverdue(now);
+ return autoSignedOutRows + overdueRows;
}
@Override
@@ -71,6 +94,163 @@
return visitorRecordMapper.deleteByIds(recordIds, username);
}
+ private void fillDetailDisplayFields(SysVisitorRecordDetailVO 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.setValidTimeText(validTimeText(detail.getValidStartTime(), detail.getValidEndTime()));
+ detail.setRegisterCollectTime(detail.getRegisterTime());
+ detail.setSignCollectTime(detail.getSignTime());
+ }
+
+ private String maskIdCard(String idCard)
+ {
+ if (StringUtils.isBlank(idCard) || idCard.length() <= 10)
+ {
+ return idCard;
+ }
+ return idCard.substring(0, 6) + "********" + idCard.substring(idCard.length() - 4);
+ }
+
+ private List<String> splitNames(String names)
+ {
+ List<String> result = new ArrayList<>();
+ if (StringUtils.isBlank(names))
+ {
+ return result;
+ }
+ String[] splitNames = names.split(",");
+ for (String name : splitNames)
+ {
+ String trimName = StringUtils.trim(name);
+ if (StringUtils.isNotBlank(trimName))
+ {
+ result.add(trimName);
+ }
+ }
+ return result;
+ }
+
+ private String registerTypeName(String registerType)
+ {
+ if ("APPOINTMENT".equals(registerType))
+ {
+ return "预约登记";
+ }
+ if ("ONSITE".equals(registerType))
+ {
+ return "现场登记";
+ }
+ return registerType;
+ }
+
+ private String statusName(String status)
+ {
+ if ("VISITING".equals(status))
+ {
+ return "来访中";
+ }
+ if ("SIGNED_OUT".equals(status))
+ {
+ return "已签离";
+ }
+ if ("PENDING_CONFIRM".equals(status))
+ {
+ return "逾期滞留";
+ }
+ if ("OVERDUE_AUTO_SIGNED_OUT".equals(status))
+ {
+ return "超期自动";
+ }
+ if ("CANCELLED".equals(status))
+ {
+ return "已取消";
+ }
+ return status;
+ }
+
+ private String verifyMethodName(String verifyMethod)
+ {
+ if (StringUtils.isBlank(verifyMethod) || StringUtils.containsAny(verifyMethod, "验证", "确认", "自动"))
+ {
+ return verifyMethod;
+ }
+ if ("FACE".equals(verifyMethod) || "FACE_VERIFY".equals(verifyMethod) || "FACE_RECOGNITION".equals(verifyMethod))
+ {
+ return "人脸验证";
+ }
+ if ("CARD".equals(verifyMethod) || "CARD_VERIFY".equals(verifyMethod))
+ {
+ return "刷卡验证";
+ }
+ if ("ID_CARD".equals(verifyMethod))
+ {
+ return "身份证验证";
+ }
+ if ("MANUAL".equals(verifyMethod))
+ {
+ return "人工确认";
+ }
+ if ("AUTO".equals(verifyMethod))
+ {
+ return "系统自动";
+ }
+ return verifyMethod;
+ }
+
+ private String validTimeText(Date validStartTime, Date validEndTime)
+ {
+ if (validStartTime == null || validEndTime == null)
+ {
+ return null;
+ }
+ LocalDateTime start = DateUtils.dateToLocalDateTime(validStartTime);
+ LocalDateTime end = DateUtils.dateToLocalDateTime(validEndTime);
+ LocalDate startDate = start.toLocalDate();
+ LocalDate endDate = end.toLocalDate();
+ if (startDate.equals(endDate))
+ {
+ return DateUtils.localDateToString(startDate) + " " + dayPartName(start.toLocalTime(), end.toLocalTime());
+ }
+ if (isDayStart(start.toLocalTime()) && isDayEnd(end.toLocalTime()))
+ {
+ return DateUtils.localDateToString(startDate) + " 至 " + DateUtils.localDateToString(endDate) + " 全天";
+ }
+ return DateUtils.parseDateToStr("yyyy-MM-dd HH:mm", validStartTime)
+ + " 至 " + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm", validEndTime);
+ }
+
+ private String dayPartName(LocalTime start, LocalTime end)
+ {
+ if (isDayStart(start) && isDayEnd(end))
+ {
+ return "全天";
+ }
+ if (start.getHour() < 12 && end.getHour() <= 12)
+ {
+ return "上午";
+ }
+ if (start.getHour() >= 12)
+ {
+ return "下午";
+ }
+ return "全天";
+ }
+
+ private boolean isDayStart(LocalTime time)
+ {
+ return time.getHour() == 0 && time.getMinute() == 0;
+ }
+
+ private boolean isDayEnd(LocalTime time)
+ {
+ return time.getHour() == 23 && time.getMinute() == 59;
+ }
+
private Long getRequiredRecordId(Long recordId)
{
if (recordId == null || recordId <= 0)
--
Gitblit v1.7.1