package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.system.domain.SysVisitorRecord; import com.ruoyi.system.dto.SysVisitorRecordAddRequest; import com.ruoyi.system.dto.SysVisitorRecordPageRequest; import com.ruoyi.system.mapper.SysVisitorRecordMapper; import com.ruoyi.system.service.ISysVisitorRecordService; 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.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; @RestController @RequestMapping("/api/visitorRecord") @Api(tags = "访客登记") public class SysApiVisitorRecordController extends BaseController { @Autowired private SysVisitorRecordMapper visitorRecordMapper; @PostMapping("/add") @ApiOperation(value = "访客登记", notes = "现场访客登记") public AjaxResult add( @RequestBody @ApiParam(value = "访客登记信息", required = true) SysVisitorRecordAddRequest request) { // ================= 参数校验 ================= if (StringUtils.isBlank(request.getVisitorName())) { return AjaxResult.error("访客姓名不能为空"); } if (StringUtils.isBlank(request.getIntervieweeName())) { return AjaxResult.error("被访人不能为空"); } if (StringUtils.isNotBlank(request.getIdCard())) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.eq(SysVisitorRecord::getIdCard, request.getIdCard()) .eq(SysVisitorRecord::getDelFlag, "0") .in(SysVisitorRecord::getStatus, "VISITING", "PENDING_CONFIRM") .last("limit 1"); SysVisitorRecord oldRecord = visitorRecordMapper.selectOne(wrapper); if (oldRecord != null) { return AjaxResult.error("该访客当前已有未结束的登记,请勿重复登记"); } } // ================= 保存 ================= SysVisitorRecord record = new SysVisitorRecord(); BeanUtils.copyProperties(request, record); record.setRegisterNo(generateRegisterNo()); record.setRegisterType("ONSITE"); record.setRegisterSource("访客机"); record.setStatus("VISITING"); record.setRegisterTime(new Date()); record.setDelFlag("0"); int rows = visitorRecordMapper.insert(record); if (rows > 0) { return AjaxResult.success(record.getRegisterNo()); } return AjaxResult.error("登记失败"); } /** * 生成登记编号 * 格式: * VIS + 年月日 + 6位随机数 * 例如: * VIS20260707123456 */ private String generateRegisterNo() { String date = new java.text.SimpleDateFormat("yyyyMMddHHmmss") .format(new Date()); String random = String.valueOf((int)((Math.random() * 900000) + 100000)); return "VIS" + date + random; } }