ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/SysApiVisitorRecordController.java
@@ -23,6 +23,7 @@ import com.ruoyi.system.mapper.SysVisitAreaMapper; import com.ruoyi.system.mapper.SysVisitorRecordMapper; import com.ruoyi.system.service.ISysVisitAreaService; import com.ruoyi.system.utils.EmployeePhoneCrypto; import com.ruoyi.system.vo.SysVisitAreaVO; import com.ruoyi.web.controller.service.SysVisitorRecordService; import com.ruoyi.web.controller.service.VisitorRegisterSyncService; @@ -73,6 +74,21 @@ return AjaxResult.error("被访人不能为空"); } List<Employee> employeeISList = employeeMapper.selectEnabledByEmployeeName(request.getIntervieweeName()); if (employeeISList.isEmpty()) { throw new ServiceException("被访人不存在,请联系工作人员"); }else { //重名 if (StringUtils.isNotEmpty(request.getBeVisitorPhone())) { String phoneHash = StringUtils.isEmpty(request.getBeVisitorPhone()) ? null : EmployeePhoneCrypto.hash(request.getBeVisitorPhone()); Employee employee = employeeMapper.selectOne(new LambdaQueryWrapper<Employee>().eq(Employee::getContactPhoneHash, phoneHash)); if (employee == null) { throw new ServiceException("被访人不存在,请联系工作人员"); } } } // 签离的当天不能再次进入 签到 LambdaQueryWrapper<SysVisitorRecord> yqwrapper = new LambdaQueryWrapper<>(); Date todayStart = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH); // 当天 00:00:00 @@ -118,6 +134,9 @@ String visitArea = Arrays.stream(visitAreaIds) .map(id -> { SysVisitArea area = sysVisitAreaMapper.selectById(Long.parseLong(id.trim())); if (area == null || "1".equals(area.getDelFlag())) { throw new ServiceException("访问区域不存在,请联系工作人员"); } return area != null ? area.getAreaName() : null; }) .filter(Objects::nonNull) @@ -130,7 +149,7 @@ .map(id -> { SysVisitArea area = sysVisitAreaMapper.selectById(Long.parseLong(id)); if (area == null) { return null; throw new ServiceException("访问区域不存在,请联系工作人员"); } AreasList areas = new AreasList(); areas.setAreaCode(area.getAreaCode()); @@ -199,11 +218,14 @@ //查询接待人的部门 if (StringUtils.isNotEmpty(record.getIntervieweeName())) { Employee employee = employeeMapper.selectEnabledByEmployeeName(record.getIntervieweeName()); if (employee != null && employee.getDeptId() != null) { SysDept sysDept = sysDeptMapper.selectDeptById(employee.getDeptId()); if (sysDept != null) { record.setIntervieweeDept(sysDept.getDeptName()); List<Employee> employee = employeeMapper.selectEnabledByEmployeeName(record.getIntervieweeName()); if (!employee.isEmpty()) { Employee employeeNo1 = employee.get(0); if (employeeNo1.getDeptId() != null) { SysDept sysDept = sysDeptMapper.selectDeptById(employeeNo1.getDeptId()); if (sysDept != null) { record.setIntervieweeDept(sysDept.getDeptName()); } } } } ruoyi-applet/src/main/java/com/ruoyi/web/controller/tool/ImageUtil.java
@@ -1,14 +1,19 @@ package com.ruoyi.web.controller.tool; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.utils.file.FileUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.binary.Base64; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.file.Files; @Slf4j @Component @@ -25,20 +30,21 @@ return null; } String imagePath = RuoYiConfig.getUploadPath() + imageUrl.replace("/profile/upload", ""); InputStream inputStream = null; ByteArrayOutputStream outputStream = null; try { // 1. 创建URL连接 URL url = new URL(imageUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(10000); connection.setDoInput(true); // 1. 获取本地文件 File imageFile = new File(imagePath); if (!imageFile.exists()) { log.error("图片文件不存在:{}", imagePath); return null; } // 2. 获取图片数据 inputStream = connection.getInputStream(); // 2. 读取图片数据 inputStream = Files.newInputStream(imageFile.toPath()); outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; @@ -51,16 +57,12 @@ byte[] imageBytes = outputStream.toByteArray(); String base64 = Base64.encodeBase64String(imageBytes); // 4. 根据图片类型添加前缀 String contentType = connection.getContentType(); if (contentType != null && contentType.startsWith("image/")) { return "data:" + contentType + ";base64," + base64; } return "data:image/jpeg;base64," + base64; // 4. 根据文件扩展名添加前缀 String contentType = getContentType(imagePath); return "data:" + contentType + ";base64," + base64; } catch (Exception e) { log.error("图片转Base64失败,URL:{}", imageUrl, e); log.error("本地图片转Base64失败,路径:{}", imagePath, e); return null; } finally { try { @@ -75,4 +77,30 @@ } } } /** * 根据文件扩展名获取Content-Type */ private static String getContentType(String imagePath) { if (StringUtils.isEmpty(imagePath)) { return "image/jpeg"; } String ext = imagePath.substring(imagePath.lastIndexOf(".") + 1).toLowerCase(); switch (ext) { case "png": return "image/png"; case "gif": return "image/gif"; case "bmp": return "image/bmp"; case "webp": return "image/webp"; case "svg": return "image/svg+xml"; case "jpg": case "jpeg": default: return "image/jpeg"; } } } ruoyi-system/src/main/java/com/ruoyi/system/dto/SysVisitorRecordAddRequest.java
@@ -50,6 +50,9 @@ @ApiModelProperty(value = "被访人") private String intervieweeName; @ApiModelProperty(value = "被访人电话") private String beVisitorPhone; /** * 接待人验证方式 */ ruoyi-system/src/main/java/com/ruoyi/system/mapper/EmployeeMapper.java
@@ -1,6 +1,7 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.domain.Employee; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -8,7 +9,7 @@ import java.util.List; @Mapper public interface EmployeeMapper { public interface EmployeeMapper extends BaseMapper<Employee> { /** * 按主键查询启用且未删除的接待人。 @@ -19,7 +20,7 @@ /** * 根据员工姓名精准查询启用的员工 */ Employee selectEnabledByEmployeeName(@Param("employeeName") String employeeName); List<Employee> selectEnabledByEmployeeName(@Param("employeeName") String employeeName); List<Employee> selectAllEnabled(); }