兴安访客小程序访客改造

This commit is contained in:
zc
2025-06-10 09:33:07 +08:00
parent 2d23219a0f
commit ccc1f08366
13 changed files with 603 additions and 95 deletions

View File

@@ -224,6 +224,18 @@ public class SysRoleController extends BaseController
return toAjax(roleService.insertAuthUsers(roleId, userIds));
}
/**
* 访客授权
*/
@Log(title = "角色管理", businessType = BusinessType.GRANT)
@PostMapping("/insertVisitor")
public AjaxResult insertVisitor(@RequestBody SysUser sysUser) {
roleService.checkRoleDataScope(sysUser.getRoleId());
Long[] userIds = new Long[1];
userIds[0] = sysUser.getUserId();
return toAjax(roleService.insertAuthUsers(sysUser.getRoleId(), userIds));
}
/**
* 获取对应角色部门树列表
*/

View File

@@ -0,0 +1,40 @@
package com.dcsoft.system.utils;
import java.util.UUID;
public class UuidUtil {
public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f",
"g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
"t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
"J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "Y", "Z" };
/**
* 获取短UUID
* @return
*/
public static String getShortUuid() {
StringBuffer shortBuffer = new StringBuffer();
String uuid = UuidUtil.getUuid();
for (int i = 0; i < 8; i++) {
String str = uuid.substring(i * 4, i * 4 + 4);
int x = Integer.parseInt(str, 16);
shortBuffer.append(chars[x % 0x3E]); // 对62取余
}
return shortBuffer.toString();
}
/**
* 获得32位UUID
*/
public static String getUuid(){
String uuid = UUID.randomUUID().toString();
//去掉“-”符号
return uuid.replaceAll("-", "");
}
}

View File

@@ -1,11 +1,16 @@
package com.dcsoft.system.visitor.controller;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpException;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dcsoft.common.core.constant.CacheConstants;
import com.dcsoft.common.core.constant.Constants;
import com.dcsoft.common.core.domain.R;
import com.dcsoft.common.core.enums.ExamineEnum;
import com.dcsoft.common.core.enums.MatterEnum;
import com.dcsoft.common.core.enums.exception.CommonExceptionEnum;
@@ -36,6 +41,7 @@ import com.dcsoft.system.uniubi.domain.Person;
import com.dcsoft.system.uniubi.service.ISysApiService;
import com.dcsoft.system.uniubi.service.ISysSdkService;
import com.dcsoft.system.utils.FileUtils;
import com.dcsoft.system.utils.UuidUtil;
import com.dcsoft.system.visitor.domain.CheckCodeVo;
import com.dcsoft.system.visitor.domain.VisVisitorExamine;
import com.dcsoft.system.visitor.domain.Visitor;
@@ -175,6 +181,8 @@ public class VisitorController extends BaseController {
// 正则表达式匹配大部分国家的手机号码格式
private static final Pattern PHONE_NUMBER_PATTERN = Pattern.compile("^1[3-9]\\d{9}$");
private static final String APPROVE_KEY = "APPROVE_KEY:APPROVE";
/**
* 查询访客信息列表
*/
@@ -292,6 +300,52 @@ public class VisitorController extends BaseController {
return success(visitor);
}
/**
* 获取访客信息详细信息(审批链接进来)
*/
@PostMapping(value = "/getVisitorInfo")
public AjaxResult getVisitorInfo(@RequestBody JSONObject js) throws Exception {
String data = js.getString("data");
if (StringUtils.isBlank(data)) {
throw new ServiceException("参数为空,请联系管理员!");
}
//数据进行解密
Object cacheObject = redisService.getCacheObject(CacheConstants.VISITOR_SMS_CODE + data);
if (ObjectUtil.isNull(cacheObject)) {
throw new ServiceException("链接不存在或已过期!");
}
String[] split = String.valueOf(cacheObject).split("&");
Long id = Long.parseLong(split[0]);
String telephone = split[1];
Visitor visitor = visitorService.selectVisitorById(id);
visitor.setTelephone(telephone);
//审核链接进来
if (StringUtils.isNotBlank(telephone)) {
if (StringUtils.equals(visitor.getExamineState(), ExamineEnum.IN_REVIEW.getCode())) {
//查询当前点击审核链接的人员信息
SysPeople sysPeople = sysPeopleService.queryPeopleName(telephone, null);
//根据手机号查询peopleId
visitor.setReviewer(String.valueOf(sysPeople.getId()));
visitor.setPosition(null);
Visitor visitor1 = visitorService.queryReviewProcess(visitor);
if (ObjectUtil.isNotNull(visitor1) && StrUtil.isNotBlank(visitor1.getState())) {
visitor.setExamineState(visitor1.getState());
}
}
}
Map<String, String> map = dictDataService.queryDictData("sys_company_type");
visitor.setMatterName(MatterEnum.getByCode(visitor.getMatter()));
visitor.setDeptName(map.get(visitor.getDeptId()));
return success(visitor);
}
/**
* 新增访客信息
*/
@@ -304,13 +358,30 @@ public class VisitorController extends BaseController {
}
//判断访客和随访人是否存在预约过的信息
List<Visitor> visitors = new ArrayList<>();
visitors.add(visitor);
if (!CollUtil.isEmpty(visitor.getItemList())) {
for (Visitor item : visitor.getItemList()) {
if (!validatePhoneNumber(item.getPhone())) {
throw new ServiceException("您输入的随访人员手机号格式不正确");
}
List<String> phones = new ArrayList<>();
List<String> idcards = new ArrayList<>();
if (CollUtil.isNotEmpty(visitor.getItemList())) {
phones = visitor.getItemList().stream().map(Visitor::getPhone).collect(Collectors.toList());
idcards = visitor.getItemList().stream().map(Visitor::getIdcard).collect(Collectors.toList());
}
phones.add(visitor.getPhone());
if (visitorService.queryVisitorByIdCount(phones) > 0) {
throw new ServiceException("手机号已存在访客预约信息");
}
idcards.add(visitor.getIdcard());
if (visitorService.queryVisitorByCardCount(idcards) > 0) {
throw new ServiceException("访客中存在已预约访客");
}
LoginUser loginUser = SecurityUtils.getLoginUser();
visitor.setCreateBy(loginUser.getUsername());
log.info("新增访客信息:{}", visitor);
int i = visitorService.insertVisitor(visitor);
// 随访人员
List<Visitor> itemList = visitor.getItemList();
if (CollUtil.isNotEmpty(visitor.getItemList())) {
for (Visitor item : itemList) {
item.setParentId(visitor.getId());
item.setSource(Constants.ONE);
item.setUserId(visitor.getUserId());
@@ -319,52 +390,38 @@ public class VisitorController extends BaseController {
item.setStartTime(visitor.getStartTime());
item.setEndTime(visitor.getEndTime());
item.setMatter(visitor.getMatter());
item.setExamineState(ExamineEnum.IN_REVIEW.getCode());
item.setCreateTime(visitor.getCreateTime());
item.setStartTime(visitor.getStartTime());
item.setEndTime(visitor.getEndTime());
visitors.add(item);
item.setVisitorType(visitor.getVisitorType());
item.setVisitingUnit(visitor.getVisitingUnit());
item.setUserName(visitor.getUserName());
visitorService.insertVisitor(item);
}
}
List<String> phones = visitors.stream().map(Visitor::getPhone).collect(Collectors.toList());
if (visitorService.queryVisitorByIdCount(phones) > 0) {
throw new ServiceException("手机号已存在访客预约信息");
}
List<String> idcards = visitors.stream().map(Visitor::getIdcard).collect(Collectors.toList());
if (visitorService.queryVisitorByCardCount(idcards) > 0) {
throw new ServiceException("访客中存在已预约访客");
}
// 校验图片
// checkPhoto(visitor.getAvatar(), visitor.getName());
log.info("新增访客信息:{}", visitors);
for (Visitor visitor1 : visitors) {
visitorService.insertVisitor(visitor1);
}
// 保存附件
if(!CollectionUtils.isEmpty(visitor.getFileList())) {
saveSysFile(visitor.getFileList(), String.valueOf(visitor.getId()));
}
// 审核通知企微发送消息(小程序来源)
// String appletLink = getAppletLink(String.valueOf(visitor.getId()), "pages/visitor/visitor/examineIndex");
SysPeople sysPeople = sysPeopleService.selectSysPeopleByUserId(visitor.getUserId());
// log.info("审核通知链接:{}", appletLink);
// sendWeCom(sysPeople.getPhone(), appletLink + " --访客姓名:" + visitor.getName());
String content = getContent(visitor, itemList);
// 访客审核
// SysBranch sysBranch = sysBranchService.selectSysBranchById(visitor.getDeptId());
// if(sysBranch != null && Constants.ZERO.equals(sysBranch.getIsExamine())) {
// VisVisitorExamine examine = new VisVisitorExamine();
// examine.setExamine(Constants.ZERO);
// visitor.setExamine(examine);
// updateVisitorExamine(visitor);
// }
return toAjax(true);
// 审核通知企微发送消息(小程序来源)
SysPeople sysPeople = sysPeopleService.selectSysPeopleByUserId(visitor.getUserId());
String url = getExamineUrl(String.valueOf(visitor.getId()), sysPeople.getPhone());
log.info("add发送审核链接{}", url);
//发送钉钉信息
// asyncsendV2(sysPeople.getPhone(), "text", content + url);
//发送企微信息
try {
// sendWeCom(sysPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
} catch (Exception e) {
log.error("访客add-sendWeCom异常{}", e.getMessage());
}
return toAjax(i);
}
/**
@@ -399,6 +456,61 @@ public class VisitorController extends BaseController {
return PHONE_NUMBER_PATTERN.matcher(number).matches();
}
/**
* 获取审核链接
*
* @return
*/
public String getExamineUrl(String id, String telephone) {
//生成8位短参作为缓存key
String code = UuidUtil.getShortUuid();
try {
while (redisService.hasKey(code)) {
code = UuidUtil.getShortUuid();
}
redisService.setCacheObject(CacheConstants.VISITOR_SMS_CODE + code, id + "&" + telephone, 30L, TimeUnit.DAYS);
} catch (Exception e) {
throw new ServiceException("缓存数据异常:" + e.getMessage());
}
return "https://fk.xyxaks.cn/h5/?c=" + code;
}
/**
* 组织链接内容(申请人&随访人基本信息)
*
* @return
*/
public String getContent(Visitor visitor, List<Visitor> itemList) {
String matterName = "";
if (StringUtils.isNotBlank(visitor.getMatter())) {
matterName = MatterEnum.getByCode(visitor.getMatter());
}
String startTime = DateUtil.format(visitor.getStartTime(), DatePattern.NORM_DATETIME_FORMATTER);
String endTime = DateUtil.format(visitor.getEndTime(), DatePattern.NORM_DATETIME_FORMATTER);
StringBuilder sb = new StringBuilder();
sb.append("收到新的访客申请:").append(matterName).append("\n");
//面试
if (StringUtils.equals(visitor.getMatter(), MatterEnum.INTERVIEW.getCode())) {
SysBranch sysBranch = sysBranchService.selectSysBranchById(visitor.getDeptId());
sb.append("面试公司:").append(sysBranch.getName()).append("\n");
} else {//访客
sb.append("来访公司:").append(visitor.getVisitingUnit() == null ? "用户未填写" : visitor.getVisitingUnit()).append("\n");
}
sb.append("申请人:").append(visitor.getName()).append("\n");
sb.append("申请人联系方式:").append(visitor.getPhone() == null ? "用户未填写" : visitor.getPhone()).append("\n");
sb.append("预约申请时间:").append(startTime).append("").append(endTime).append("\n");
if (CollUtil.isNotEmpty(itemList)) {
for (Visitor item : itemList) {
sb.append("随访人:").append(item.getName()).append("\n");
sb.append("随访人联系方式:").append(item.getPhone() == null ? "未填写" : item.getPhone()).append("\n");
}
}
sb.append("点击链接进行审核:");
log.info("getContent{}", JSON.toJSONString(sb));
return sb.toString();
}
/**
* 钉工牌消息通知
*/
@@ -743,6 +855,132 @@ public class VisitorController extends BaseController {
return toAjax(visitorService.updateVisitor(visitor));
}
/**
* 流程审核
*/
@Log(title = "流程审核", businessType = BusinessType.UPDATE)
@PostMapping("/approve")
@Transactional
public AjaxResult approve(@RequestBody Visitor visitor) {
log.info("流程审核入参 {}", JSON.toJSONString(visitor));
try {
String telephone = StringUtils.isBlank(visitor.getTelephone()) ? "1" : visitor.getTelephone();
Boolean lock = redisService.lock(APPROVE_KEY, telephone, 60 * 5, TimeUnit.SECONDS);
if (!lock) {
log.error("approve-审核人员正在审核中");
return error("正在审核中");
}
List<SysManageRecord> record = visitorService.querySysManageRecord(visitor.getUserId());
if (CollectionUtils.isEmpty(record)) {
throw new RuntimeException("被访人未授权通行");
}
//查询当前审核人基本信息
SysPeople sysPeople = sysPeopleService.queryPeopleName(telephone, null);
visitor.setUserId(sysPeople.getId());
visitor.setReviewer(String.valueOf(sysPeople.getId()));
//查询当前访客信息
Visitor visitor1 = visitorService.selectVisitorSimpleById(visitor.getId());
visitor.setCurrentNode(visitor1.getCurrentNode() + 1);
//赋值公共字段
VisVisitorExamine examine = visitor.getExamine();
examine.setVisitorId(visitor.getId());
visitor.setState(examine.getExamine());
//审核通过
if(Constants.ZERO.equals(examine.getExamine())) {
//被访人审核
if (visitor1.getCurrentNode() == 1) {
visitor.setNextStepReviewer(visitor.getReviewer2());
List<Visitor> list = new ArrayList<>();
Visitor visitor2 = new Visitor();
visitor2.setId(visitor.getId());
visitor2.setReviewer(String.valueOf(sysPeople.getId()));
visitor2.setState(ExamineEnum.PASSED.getCode());
list.add(visitor2);
Visitor visitor3 = new Visitor();
visitor3.setId(visitor.getId());
visitor3.setState(ExamineEnum.IN_REVIEW.getCode());
visitor3.setReviewer(visitor.getReviewer2());
list.add(visitor3);
Visitor visitor4 = new Visitor();
visitor4.setId(visitor.getId());
visitor4.setState(ExamineEnum.IN_REVIEW.getCode());
visitor4.setReviewer(visitor.getReviewer3());
list.add(visitor4);
//保存审核环节表
visitorService.saveVisitorReviewProcessList(list);
}
//二级审核人审核
else if (visitor1.getCurrentNode() == 2) {
visitor.setNextStepReviewer(visitor.getReviewer3());
visitorService.updateVisitorReviewProcess(visitor);
}
//如果有下一级审核人员,发送钉钉,企微审核消息链接
if (StrUtil.isNotBlank(visitor.getNextStepReviewer())) {
//查询下一节点审核人信息
SysPeople nextPeople = sysPeopleService.selectSysPeopleById(Long.parseLong(visitor.getNextStepReviewer()));
//查询随访人员信息
Visitor visitor2 = new Visitor();
visitor2.setParentId(visitor.getId());
List<Visitor> itemList = visitorService.selectVisitorItemList(visitor2);
String content = getContent(visitor1, itemList);
String url = getExamineUrl(String.valueOf(visitor.getId()), nextPeople.getPhone());
log.info("approve发送审核链接{}", url);
String str = content + url;
// asyncsendV2(nextPeople.getPhone(), "text", str);
log.info("发送钉钉结束:{}", nextPeople.getPhone());
} else {//最后一级审核
visitor.setExamineState(examine.getExamine());
//保存审核历史表
examine.setRejectReason(visitor.getRejectReason());
visVisitorExamineService.insertVisVisitorExamine(examine);
//修改环节状态
visitorService.updateVisitorReviewProcess(visitor);
// 同意后,给被访人和访客们发送审核结束短信
Visitor visitor2 = new Visitor();
visitor2.setParentId(visitor.getId());
List<Visitor> itemList = visitorService.selectVisitorItemList(visitor2);
}
}
//审核拒绝
if (Constants.ONE.equals(examine.getExamine())) {
visitor.setExamineState(examine.getExamine());
//保存审核历史表
examine.setRejectReason(visitor.getRejectReason());
visVisitorExamineService.insertVisVisitorExamine(examine);
try {
// sendWeCom(telephone, visitor.getName() + "的访客审核已驳回");
} catch (Exception e) {
log.error("访客approve-sendWeCom驳回异常{}", e.getMessage());
}
// 申请人发送短信(审核不通过)
// sendMessage(visitor.getPhone(), "1", smsProperties.getTemplate3());
}
visitorService.approve(visitor);
return toAjax(true);
} catch (Exception e) {
log.error("审核异常:{}", e.getMessage());
return toAjax(false);
}finally {
redisService.deleteObject(APPROVE_KEY);
}
}
/**
* 被访人审核
*/
@@ -822,10 +1060,10 @@ public class VisitorController extends BaseController {
if("7529".equals(people.getPosition())) {
visitor.setPosition("8121");
}
String string = visitorService.queryReviewProcess(visitor);
Visitor visitor5 = visitorService.queryReviewProcess(visitor);
visitor.setNextStepReviewer(StringUtils.isNotEmpty(visitor.getReviewer2()) ? visitor.getReviewer2() : visitor.getReviewer3());
if(StringUtils.isNotEmpty(string)) {
visitor.setNextStepReviewer(string);
if(StringUtils.isNotEmpty(visitor5.getReviewer())) {
visitor.setNextStepReviewer(visitor5.getReviewer());
}
if(StringUtils.isEmpty(visitor.getNextStepReviewer())) {
visitor.setNextStepReviewer(String.valueOf(visitor.getUserId()));
@@ -890,7 +1128,7 @@ public class VisitorController extends BaseController {
visitor.setState(examine.getExamine());
visitorService.updateVisitorReviewProcess(visitor);
OfficialAccountVo officialAccountVo = sysPeopleService.queryPeopleById(string);
OfficialAccountVo officialAccountVo = sysPeopleService.queryPeopleById(visitor5.getReviewer());
// 审核通知企微发送消息(小程序来源)
String appletLink = getAppletLink(String.valueOf(visitor.getId()), "pages/visitor/visitor/examineIndex");
sendWeCom(officialAccountVo.getPhone(), appletLink + " --访客姓名:" + visitor.getName());

View File

@@ -61,8 +61,15 @@ passwordPermission 密码权限 */
private Long ruleId;
private String rejectReason;
public String getRejectReason() {
return rejectReason;
}
public void setRejectReason(String rejectReason) {
this.rejectReason = rejectReason;
}
public void setId(Long id)
{

View File

@@ -201,6 +201,11 @@ public class Visitor extends BaseEntity {
private List<Visitor> visitor;
/**
* 小程序审核链接的手机号
**/
private String telephone;
/**
* 离开时间
*/
@@ -270,4 +275,13 @@ public class Visitor extends BaseEntity {
* 园区
*/
private String park;
/** 当前审批节点 */
private Integer currentNode;
/**
* 审核理由
*/
private String rejectReason;
}

View File

@@ -228,7 +228,7 @@ public interface VisitorMapper
void updateVisitorReviewProcess(Visitor visitor);
String queryReviewProcess(Visitor visitor);
Visitor queryReviewProcess(Visitor visitor);
int queryVisitorReviewProcessCount(Long id);
@@ -239,4 +239,10 @@ public interface VisitorMapper
List<Visitor> selectAppVisitorList(Visitor visitor);
List<CheckCodeVo> queryCode(List<Long> collect);
void updateVisitorByParentId(Visitor updateVisitor);
String selectRecordsByPhone(Long id, String telephone);
void saveVisitorReviewProcessList(@Param("list") List<Visitor> list);
}

View File

@@ -244,9 +244,17 @@ public interface IVisitorService
void updateVisitorReviewProcess(Visitor visitor);
String queryReviewProcess(Visitor visitor);
Visitor queryReviewProcess(Visitor visitor);
int queryVisitorReviewProcessCount(Long id);
List<Visitor> selectAppVisitorList(Visitor visitor);
Visitor selectVisitorSimpleById(Long id);
void approve(Visitor visitor);
String selectRecordsByPhone(Long id, String telephone);
void saveVisitorReviewProcessList(List<Visitor> list);
}

View File

@@ -1,13 +1,17 @@
package com.dcsoft.system.visitor.service.impl;
import com.dcsoft.common.core.constant.Constants;
import com.dcsoft.common.core.constant.SecurityConstants;
import com.dcsoft.common.core.domain.R;
import com.dcsoft.common.core.enums.ExamineEnum;
import com.dcsoft.common.core.exception.ServiceException;
import com.dcsoft.common.core.utils.CollUtil;
import com.dcsoft.common.core.web.page.TableDataInfoPage;
import com.dcsoft.common.datascope.annotation.DataScope;
import com.dcsoft.common.security.utils.SecurityUtils;
import com.dcsoft.system.api.RemoteFileService;
import com.dcsoft.system.api.domain.SysFile;
import com.dcsoft.system.api.model.LoginUser;
import com.dcsoft.system.domain.SysBlackList;
import com.dcsoft.system.domain.SysBranch;
import com.dcsoft.system.domain.SysManageRecord;
@@ -31,10 +35,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import static com.dcsoft.common.core.utils.PageUtils.startPage;
@@ -63,6 +64,8 @@ public class VisitorServiceImpl implements IVisitorService {
@Value("${system.type}")
public String systemType;
@Value("${qd.url:http://}")
public String qdUrl;
/**
* 卡权限创建接口
*/
@@ -138,6 +141,8 @@ public class VisitorServiceImpl implements IVisitorService {
*/
@Override
public int insertVisitor(Visitor visitor) {
visitor.setExamineState(ExamineEnum.IN_REVIEW.getCode());
visitor.setCurrentNode(1);
return visitorMapper.insertVisitor(visitor);
}
@@ -615,6 +620,49 @@ public class VisitorServiceImpl implements IVisitorService {
}
}
/**
* 审批
*
* @param visitor
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void approve(Visitor visitor) {
//保存审核记录表
visitorMapper.saveVisitorAuditRecords(visitor);
// 审核同意
if (Constants.ZERO.equals(visitor.getExamineState())) {
// 保存审核二维码地址信息
CheckCodeVo codeVo = new CheckCodeVo();
codeVo.setCode(qdUrl + visitor.getId() + "&time=" + new Date().getTime());
codeVo.setVisitorId(String.valueOf(visitor.getId()));
String replace = UUID.randomUUID().toString().replace("-", "");
codeVo.setId(replace);
if (StringUtils.isNotEmpty(visitor.getCheckCodeId())) {
codeVo.setId(visitor.getCheckCodeId());
}
if (visitor != null) {
codeVo.setStartTime(visitor.getStartTime());
codeVo.setEndTime(visitor.getEndTime());
}
saveVisCheckCode(codeVo);
}
visitorMapper.updateVisitor(visitor);
//修改随访人员信息
Visitor updateVisitor = new Visitor();
updateVisitor.setParentId(visitor.getId());
updateVisitor.setExamineState(visitor.getExamineState());
visitorMapper.updateVisitorByParentId(updateVisitor);
}
/**
* 保存审核记录
*
@@ -662,7 +710,7 @@ public class VisitorServiceImpl implements IVisitorService {
}
@Override
public String queryReviewProcess(Visitor visitor) {
public Visitor queryReviewProcess(Visitor visitor) {
return visitorMapper.queryReviewProcess(visitor);
}
@@ -703,4 +751,22 @@ public class VisitorServiceImpl implements IVisitorService {
}
@Override
public Visitor selectVisitorSimpleById(Long id) {
Visitor visitor = visitorMapper.selectVisitorById(id);
if (visitor == null) {
return new Visitor();
}
return visitor;
}
@Override
public String selectRecordsByPhone(Long id, String telephone) {
return visitorMapper.selectRecordsByPhone(id, telephone);
}
@Override
public void saveVisitorReviewProcessList(List<Visitor> list) {
visitorMapper.saveVisitorReviewProcessList(list);
}
}