兴安出门证申请开发

This commit is contained in:
zc
2025-07-09 14:27:28 +08:00
parent 393c180817
commit 1fac9db599
17 changed files with 798 additions and 237 deletions

View File

@@ -0,0 +1,15 @@
package com.dcsoft.system.domain.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class IdNamelVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
}

View File

@@ -1,25 +1,28 @@
package com.dcsoft.system.visitor.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.dcsoft.common.core.constant.CacheConstants;
import com.dcsoft.common.core.constant.Constants;
import com.dcsoft.common.core.exception.ServiceException;
import com.dcsoft.common.core.utils.CollUtil;
import com.dcsoft.common.core.utils.SmsUtils;
import com.dcsoft.common.core.web.controller.BaseController;
import com.dcsoft.common.core.web.domain.AjaxResult;
import com.dcsoft.common.core.web.page.TableDataInfo;
import com.dcsoft.common.log.annotation.Log;
import com.dcsoft.common.log.enums.BusinessType;
import com.dcsoft.common.redis.service.RedisService;
import com.dcsoft.common.security.utils.SecurityUtils;
import com.dcsoft.common.sms.config.properties.SmsProperties;
import com.dcsoft.system.api.model.LoginUser;
import com.dcsoft.system.domain.SysPeople;
import com.dcsoft.system.domain.vo.IdNamelVo;
import com.dcsoft.system.service.ISysDictDataService;
import com.dcsoft.system.service.ISysPeopleService;
import com.dcsoft.system.utils.UuidUtil;
import com.dcsoft.system.visitor.domain.CheckCodeVo;
import com.dcsoft.system.visitor.domain.VisCarryStuffVo;
import com.dcsoft.system.visitor.domain.VisExitOutVo;
import com.dcsoft.system.visitor.domain.VisStuffInfoVo;
import com.dcsoft.system.visitor.domain.VisVisitorExamine;
import com.dcsoft.system.visitor.service.IVisCarryStuffService;
import com.dcsoft.system.visitor.service.IVisVisitorExamineService;
@@ -33,6 +36,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j
@RestController
@@ -68,26 +72,45 @@ public class VisCarryStuffController extends BaseController {
@GetMapping("/list")
public TableDataInfo list(VisCarryStuffVo vo) {
public TableDataInfo list(VisExitOutVo vo) {
startPage();
List<VisExitOutVo> list = visCarryStuffService.selectList(vo);
if (CollUtil.isEmpty(list)) {
return getDataTable(list);
}
//查询物品信息列表
List<Long> collect = list.stream().map(VisExitOutVo::getId).collect(Collectors.toList());
VisStuffInfoVo visStuffInfoVo = new VisStuffInfoVo();
visStuffInfoVo.setExitIds(collect);
List<VisStuffInfoVo> stuffList = visCarryStuffService.selectStuffList(visStuffInfoVo);
if (CollUtil.isEmpty(stuffList)) {
return getDataTable(list);
}
//处理字典值
Map<String, String> map = dictDataService.queryDictData("vis_out_stuff_type");
List<VisCarryStuffVo> list =visCarryStuffService.selectList(vo);
list.forEach(vis -> vis.setStuffTypeName(map.get(vis.getStuffType())));
stuffList.forEach(stuff -> {
if (StrUtil.isNotBlank(stuff.getType())) {
stuff.setTypeName(map.get(stuff.getType()));
}
if (StrUtil.isNotBlank(stuff.getBackType())) {
stuff.setBackTypeName(map.get(stuff.getBackType()));
}
if (StrUtil.isNotBlank(stuff.getImgUrls())) {
stuff.setImgUrlList(Arrays.asList(stuff.getImgUrls().split(",")));
}
if (StrUtil.isNotBlank(stuff.getBackImgUrls())) {
stuff.setBackImgUrlList(Arrays.asList(stuff.getBackImgUrls().split(",")));
}
});
return getDataTable(list);
}
//构造数据
Map<Long, List<VisStuffInfoVo>> collect1 = stuffList.stream().collect(Collectors.groupingBy(VisStuffInfoVo::getExitId));
list.forEach(exit -> {
exit.setVisStuffInfoList(collect1.get(exit.getId()));
});
/**
* 小程序查询我的携物信息列表
*/
@GetMapping("/app/list")
public TableDataInfo appList(VisCarryStuffVo vo) {
LoginUser user = SecurityUtils.getLoginUser();
vo.setCreateBy(user.getUsername());
Map<String, String> map = dictDataService.queryDictData("vis_out_stuff_type");
List<VisCarryStuffVo> list =visCarryStuffService.selectList(vo);
list.forEach(vis -> vis.setStuffTypeName(map.get(vis.getStuffType())));
return getDataTable(list);
}
@@ -96,10 +119,34 @@ public class VisCarryStuffController extends BaseController {
*/
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
VisCarryStuffVo stuffVo = visCarryStuffService.selectVisStuffById(id);
VisExitOutVo stuffVo = visCarryStuffService.selectVisStuffById(id);
//查询物品信息列表
VisStuffInfoVo visStuffInfoVo = new VisStuffInfoVo();
visStuffInfoVo.setExitId(stuffVo.getId());
List<VisStuffInfoVo> stuffList = visCarryStuffService.selectStuffList(visStuffInfoVo);
if (CollUtil.isNotEmpty(stuffList)) {
//处理字典
Map<String, String> map = dictDataService.queryDictData("vis_out_stuff_type");
stuffList.forEach(stuff -> {
if (StrUtil.isNotBlank(stuff.getType())) {
stuff.setTypeName(map.get(stuff.getType()));
}
if (StrUtil.isNotBlank(stuff.getBackType())) {
stuff.setBackTypeName(map.get(stuff.getBackType()));
}
if (StrUtil.isNotBlank(stuff.getImgUrls())) {
stuff.setImgUrlList(Arrays.asList(stuff.getImgUrls().split(",")));
}
if (StrUtil.isNotBlank(stuff.getBackImgUrls())) {
stuff.setBackImgUrlList(Arrays.asList(stuff.getBackImgUrls().split(",")));
}
});
stuffVo.setVisStuffInfoList(stuffList);
}
//查询二维码信息
CheckCodeVo codeVo = visCarryStuffService.selectStuffCheckCode(id);
Map<String, String> map = dictDataService.queryDictData("vis_out_stuff_type");
stuffVo.setStuffTypeName(map.get(stuffVo.getStuffType()));
if (ObjectUtil.isNotNull(codeVo)) {
stuffVo.setQrCode(codeVo.getCode());
}
@@ -110,65 +157,42 @@ public class VisCarryStuffController extends BaseController {
/**
* 新增访客信息
*/
@Log(title = "携物流程审核", businessType = BusinessType.INSERT)
@Log(title = "出门证申请", businessType = BusinessType.INSERT)
@PostMapping
@Transactional
public AjaxResult add(@RequestBody VisCarryStuffVo vo) {
log.info("新增携物申请信息:{}", vo);
public AjaxResult add(@RequestBody VisExitOutVo vo) {
log.info("新增出门证申请信息:{}", vo);
try {
visCarryStuffService.insertVisCarryStuff(vo);
//新增出门申请
visCarryStuffService.insertVisExitOut(vo);
//新增物资信息
List<VisStuffInfoVo> visStuffInfoList = vo.getVisStuffInfoList();
visStuffInfoList.forEach(stuff -> stuff.setExitId(vo.getId()));
visCarryStuffService.insertVisStuffInfo(visStuffInfoList);
} catch (Exception e) {
log.error("携物申请add异常", e);
return AjaxResult.error("系统异常,请重新提交或联系管理员!");
log.error("出门证申请add异常", e);
throw new ServiceException("系统异常,请重新提交或联系管理员!");
}
//查询一级审核人信息
// 审核通知企微发送消息(小程序来源)
SysPeople sysPeople = new SysPeople();
sysPeople.setCarryStuffExamine("1");
sysPeople.setBranchId("0");
List<SysPeople> peopleList = sysPeopleService.selectSysPeopleLists(sysPeople);
// 通知一级审核人,企微发送消息(小程序来源)
SysPeople people = sysPeopleService.selectSysPeopleById(vo.getReviewer1());
for (SysPeople people : peopleList) {
String url = getExamineUrl(String.valueOf(vo.getId()), people.getPhone());
log.info("携物申请add发送审核链接{}", url);
//发送钉钉信息
// String content = getContent(vo);
// visitorController.asyncsendV2(sysPeople.getPhone(), "text", content + url);
String url = getExamineUrl(String.valueOf(vo.getId()), people.getPhone());
log.info("出门证申请add发送{}审核链接:{}", people.getPhone(), url);
//发送企微信息
try {
visitorController.sendWeCom(sysPeople.getPhone(), url + " --访客姓名:" + vo.getName());
} catch (Exception e) {
log.error("携物申请add-sendWeCom异常", e);
return AjaxResult.error("系统异常,请重新提交或联系管理员!");
}
//发送企微信息
try {
// visitorController.sendWeCom(people.getPhone(), url + " --访客姓名:" + vo.getName());
} catch (Exception e) {
log.error("出门证申请add-sendWeCom异常", e);
throw new ServiceException("系统异常,请重新提交或联系管理员!");
}
return AjaxResult.success();
}
/**
* 组织链接内容(申请人&随访人基本信息)
*
* @return
*/
private String getContent(VisCarryStuffVo vo) {
String matterName = "携物出门申请";
// String visTime = DateUtil.format(vo.getVisTime(), DatePattern.NORM_DATE_FORMATTER);
StringBuilder sb = new StringBuilder();
sb.append("收到新的携物出门申请:").append(matterName).append("\n");
sb.append("申请人:").append(vo.getName()).append("\n");
sb.append("物品名称:").append(vo.getStuffName()).append("\n");
sb.append("物品类型:").append(vo.getStuffTypeName()).append("\n");
sb.append("物品数量:").append(vo.getStuffNumber()).append("\n");
sb.append("点击链接进行审核:");
log.info("getContent{}", JSON.toJSONString(sb));
return sb.toString();
}
/**
* 获取审核链接
*
@@ -188,6 +212,14 @@ public class VisCarryStuffController extends BaseController {
return "https://fk.xyxaks.cn/h5/?c=" + code + "2";
}
/**
* 生成出门证编号
* @return
*/
@PostMapping("/getExitPermitNo")
public AjaxResult getExitPermitNo() {
return AjaxResult.success("操作成功", System.currentTimeMillis() + SmsUtils.generateSmsCode());
}
/**
* 流程审核
@@ -195,7 +227,7 @@ public class VisCarryStuffController extends BaseController {
@Log(title = "携物流程审核", businessType = BusinessType.UPDATE)
@PostMapping("/approve")
@Transactional
public AjaxResult approve(@RequestBody VisCarryStuffVo vo) {
public AjaxResult approve(@RequestBody VisExitOutVo vo) {
log.info("携物流程审核入参 {}", JSON.toJSONString(vo));
try {
String telephone = StringUtils.isBlank(vo.getTelephone()) ? "1" : vo.getTelephone();
@@ -208,8 +240,8 @@ public class VisCarryStuffController extends BaseController {
//查询当前审核人基本信息
SysPeople sysPeople = sysPeopleService.queryPeopleName(telephone, null);
//查询携物申请详情信息
VisCarryStuffVo stuffVo = visCarryStuffService.selectVisStuffById(vo.getId());
//查询出门证申请详情信息
VisExitOutVo stuffVo = visCarryStuffService.selectVisStuffById(vo.getId());
//保存审核环节表
vo.setReviewer(sysPeople.getId());
@@ -218,92 +250,94 @@ public class VisCarryStuffController extends BaseController {
//保存审核历史表
VisVisitorExamine examine = new VisVisitorExamine();
examine.setStuffId(vo.getId());
examine.setExitId(vo.getId());
examine.setCreateBy(sysPeople.getName());
examine.setExamine(vo.getExamineState());
//审核通过
List<SysPeople> peopleList = new ArrayList<>();
SysPeople peopleQuery = new SysPeople();
SysPeople people = new SysPeople();
if(Constants.ZERO.equals(vo.getExamineState())) {
//一级审核人审核
if (stuffVo.getCurrentNode() == 1) {
vo.setExamineState(null);
vo.setExamineState("2");
vo.setCurrentNode(2);
vo.setReviewer1(sysPeople.getId());
//查询二级审核人信息,发送审核链接
peopleQuery.setCarryStuffExamine("2");
peopleQuery.setBranchId("0");
peopleList = sysPeopleService.selectSysPeopleLists(peopleQuery);
people = sysPeopleService.selectSysPeopleById(stuffVo.getReviewer2());
}
//二级审核人审核
else if (stuffVo.getCurrentNode() == 2) {
vo.setExamineState(null);
vo.setExamineState("2");
vo.setCurrentNode(3);
vo.setReviewer2(sysPeople.getId());
//查询三级审核人信息,发送审核链接
peopleQuery.setCarryStuffExamine("3");
peopleQuery.setBranchId("0");
peopleList = sysPeopleService.selectSysPeopleLists(peopleQuery);
people = sysPeopleService.selectSysPeopleById(stuffVo.getReviewer3());
}
else {//三级审核,最后一级
vo.setReviewer3(sysPeople.getId());
//保存审核历史表
visVisitorExamineService.insertVisVisitorExamine(examine);
// 保存审核二维码地址信息
CheckCodeVo codeVo = new CheckCodeVo();
codeVo.setCode(vo.getId() + "&time=" + new Date().getTime());
codeVo.setStuffId(String.valueOf(vo.getId()));
codeVo.setExitId(String.valueOf(vo.getId()));
codeVo.setId(UUID.randomUUID().toString().replace("-", ""));
visitorService.saveVisCheckCode(codeVo);
}
}
//向下级审核人发送审核信息
for (SysPeople people : peopleList) {
String url = getExamineUrl(String.valueOf(vo.getId()), people.getPhone());
log.info("携物申请appove发送审核链接{}", url);
//发送钉钉信息
// String content = getContent(vo);
// visitorController.asyncsendV2(sysPeople.getPhone(), "text", content + url);
String url = getExamineUrl(String.valueOf(vo.getId()), people.getPhone());
log.info("出门证申请appove发送{}审核链接:{}", people.getPhone(), url);
//发送企微信息
try {
visitorController.sendWeCom(sysPeople.getPhone(), url + " --访客姓名:" + vo.getName());
} catch (Exception e) {
log.error("携物申请add-sendWeCom异常", e);
return AjaxResult.error("系统异常,请重新提交或联系管理员!");
}
//发送企微信息
try {
// visitorController.sendWeCom(people.getPhone(), url + " --访客姓名:" + vo.getName());
} catch (Exception e) {
log.error("出门证申请add-sendWeCom异常", e);
throw new ServiceException("系统异常,请重新提交或联系管理员!");
}
//审核拒绝
if (Constants.ONE.equals(vo.getExamineState())) {
//保存审核历史表
visVisitorExamineService.insertVisVisitorExamine(examine);
try {
visitorController.sendWeCom(telephone, vo.getName() + "的访客审核已驳回");
// visitorController.sendWeCom(telephone, vo.getName() + "的访客审核已驳回");
} catch (Exception e) {
log.error("访客approve-sendWeCom驳回异常", e);
}
// 申请人发送短信(审核不通过)
SysPeople sysPeople1 = sysPeopleService.selectSysPeopleById(stuffVo.getUserId());
visitorController.sendMessage(sysPeople1.getPhone(), "1", smsProperties.getTemplate3());
// visitorController.sendMessage(sysPeople1.getPhone(), "1", smsProperties.getTemplate3());
}
visCarryStuffService.updateStaff(vo);
return toAjax(true);
} catch (Exception e) {
log.error("审核异常:", e);
return toAjax(false);
throw new ServiceException("审核异常");
}finally {
redisService.deleteObject(APPROVE_KEY);
}
}
/**
* 查询审核人下拉数据
* @return
*/
@PostMapping("/getReviewerSelect")
public AjaxResult getReviewerSelect(@RequestBody SysPeople people) {
people.setBranchId("0");
List<SysPeople> peopleList = sysPeopleService.selectSysPeopleLists(people);
List<IdNamelVo> list = new ArrayList<>();
peopleList.forEach(item -> {
IdNamelVo vo = new IdNamelVo();
vo.setId(item.getId());
vo.setName(item.getName());
list.add(vo);
});
return AjaxResult.success(list);
}
}

View File

@@ -0,0 +1,63 @@
package com.dcsoft.system.visitor.controller;
import com.dcsoft.common.core.exception.ServiceException;
import com.dcsoft.common.core.web.controller.BaseController;
import com.dcsoft.common.core.web.domain.AjaxResult;
import com.dcsoft.common.core.web.page.TableDataInfo;
import com.dcsoft.common.log.annotation.Log;
import com.dcsoft.common.log.enums.BusinessType;
import com.dcsoft.system.visitor.domain.VisExitOutRecordVo;
import com.dcsoft.system.visitor.service.IVisExitOutRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/exitRecord")
public class VisExitOutRecordController extends BaseController {
@Resource
private IVisExitOutRecordService visExitOutRecordService;
@GetMapping("/list")
public TableDataInfo list(VisExitOutRecordVo vo) {
startPage();
List<VisExitOutRecordVo> list = visExitOutRecordService.selectList(vo);
return getDataTable(list);
}
/**
* 获取出门记录详情
*/
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
VisExitOutRecordVo stuffVo = visExitOutRecordService.selectExitOutRecordById(id);
return success(stuffVo);
}
/**
* 新增访客信息
*/
@Log(title = "新增出门记录", businessType = BusinessType.INSERT)
@PostMapping
@Transactional
public AjaxResult add(@RequestBody VisExitOutRecordVo vo) {
log.info("新增出门记录信息:{}", vo);
try {
//新增出门申请
visExitOutRecordService.insertExitOutRecord(vo);
} catch (Exception e) {
log.error("新增出门记录异常:", e);
throw new ServiceException("系统异常");
}
return AjaxResult.success();
}
}

View File

@@ -337,7 +337,7 @@ public class VisitorController extends BaseController {
String telephone = split[1];
if (StringUtils.equals("2", type)) {
VisCarryStuffVo visCarryStuff = getVisCarryStuff(id, telephone);
VisExitOutVo visCarryStuff = getVisCarryStuff(id, telephone);
visCarryStuff.setTelephone(telephone);
return success(visCarryStuff);
}
@@ -376,15 +376,24 @@ public class VisitorController extends BaseController {
* @param telephone
* @return
*/
private VisCarryStuffVo getVisCarryStuff(Long id, String telephone) {
VisCarryStuffVo stuffVo = visCarryStuffService.selectVisStuffById(id);
CheckCodeVo codeVo = visCarryStuffService.selectStuffCheckCode(id);
Map<String, String> map = dictDataService.queryDictData("vis_out_stuff_type");
stuffVo.setStuffTypeName(map.get(stuffVo.getStuffType()));
if (ObjectUtil.isNotNull(codeVo)) {
stuffVo.setQrCode(codeVo.getCode());
private VisExitOutVo getVisCarryStuff(Long id, String telephone) {
VisExitOutVo stuffVo = visCarryStuffService.selectVisStuffById(id);
//查询物品信息列表
VisStuffInfoVo visStuffInfoVo = new VisStuffInfoVo();
visStuffInfoVo.setExitId(stuffVo.getId());
List<VisStuffInfoVo> stuffList = visCarryStuffService.selectStuffList(visStuffInfoVo);
if (CollUtil.isNotEmpty(stuffList)) {
//处理字典
Map<String, String> map = dictDataService.queryDictData("vis_out_stuff_type");
stuffList.forEach(stuff -> {
stuff.setTypeName(map.get(stuff.getType()));
stuff.setBackTypeName(map.get(stuff.getBackType()));
});
stuffVo.setVisStuffInfoList(stuffList);
}
//查询审核流程信息
List<VisitorReviewProcessVo> reviewProcess = visCarryStuffService.queryVisitorReviewProcessList(id);
if(CollUtil.isNotEmpty(reviewProcess)) {
stuffVo.setReviewProcessList(reviewProcess);
@@ -395,11 +404,10 @@ public class VisitorController extends BaseController {
SysPeople sysPeople = sysPeopleService.queryPeopleName(telephone, null);
//如果当前点击链接的审核人员级别小于流程处于的级别,展示已审核的结果
if (Integer.parseInt(sysPeople.getCarryStuffExamine()) < stuffVo.getCurrentNode()) {
if (StringUtils.isNotBlank(sysPeople.getCarryStuffExamine()) && Integer.parseInt(sysPeople.getCarryStuffExamine()) < stuffVo.getCurrentNode()) {
VisitorReviewProcessVo processVo = visCarryStuffService.queryReviewProcessNew(stuffVo);
stuffVo.setExamineState(processVo.getState());
}
}
return stuffVo;
@@ -538,7 +546,7 @@ public class VisitorController extends BaseController {
//发送企微信息
try {
sendWeCom(sysPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
// sendWeCom(sysPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
} catch (Exception e) {
log.error("访客add-sendWeCom异常", e);
}
@@ -1053,7 +1061,7 @@ public class VisitorController extends BaseController {
log.info("approve发送审核链接{}", url);
try {
sendWeCom(nextPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
// sendWeCom(nextPeople.getPhone(), url + " --访客姓名:" + visitor.getName());
} catch (Exception e) {
log.error("访客approve-sendWeCom异常", e);
}
@@ -1096,14 +1104,14 @@ public class VisitorController extends BaseController {
visitorService.updateVisitorReviewProcess(visitor);
try {
sendWeCom(telephone, visitor.getName() + "的访客审核已驳回");
// sendWeCom(telephone, visitor.getName() + "的访客审核已驳回");
} catch (Exception e) {
log.error("访客approve-sendWeCom驳回异常", e);
}
// 申请人发送短信(审核不通过)
log.info("临时日志,发拒绝短信{}", visitor.getPhone());
sendMessage(visitor.getPhone(), "1", smsProperties.getTemplate3());
// sendMessage(visitor.getPhone(), "1", smsProperties.getTemplate3());
}
visitorService.approve(visitor);
@@ -1111,7 +1119,7 @@ public class VisitorController extends BaseController {
return toAjax(true);
} catch (Exception e) {
log.error("审核异常:", e);
return toAjax(false);
throw new ServiceException("审核异常");
}finally {
redisService.deleteObject(APPROVE_KEY);
}

View File

@@ -16,7 +16,7 @@ public class CheckCodeVo {
private String visitorId;
private String stuffId;
private String exitId;
}

View File

@@ -0,0 +1,31 @@
package com.dcsoft.system.visitor.domain;
import com.dcsoft.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class VisExitOutRecordVo extends BaseEntity {
private Long id;
/**
* 保安
*/
private Long userId;
/**
* 保安名字
*/
private String userName;
/**
* 出门申请id
*/
private Long exitId;
}

View File

@@ -1,7 +1,6 @@
package com.dcsoft.system.visitor.domain;
import com.dcsoft.common.core.annotation.Excel;
import com.dcsoft.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@@ -10,10 +9,13 @@ import java.util.Date;
import java.util.List;
@Data
public class VisCarryStuffVo extends BaseEntity {
public class VisExitOutVo extends BaseEntity {
private Long id;
/**
* 发货人申请人
*/
private Long userId;
/**
@@ -26,47 +28,42 @@ public class VisCarryStuffVo extends BaseEntity {
*/
private String name;
/**
* 申请人联系方式
*/
private String phone;
/**
* 出门证编号
*/
private String exitPermitNo;
/**
* 经办人
*/
private String peopleId;
/**
* 申请单位
*/
private String visitingUnit;
/**
* 物品名称
*/
private String stuffName;
/**
* 物品类型
*/
private String stuffType;
/**
* 物品类型名称
*/
private String stuffTypeName;
/**
* 物品数量
*/
private String stuffNumber;
/**
* 交通工具
*/
private String vehicle;
/**
* 现场照片
*/
private String imgUrls;
/**
* 日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date visTime;
/**
* 车牌
*/
private String carNo;
/**
* 一级审核人
*/
@@ -113,6 +110,11 @@ public class VisCarryStuffVo extends BaseEntity {
*/
private Integer currentNode;
/**
* 物品信息列表
*/
private List<VisStuffInfoVo> visStuffInfoList;
private List<VisitorReviewProcessVo> reviewProcessList;
}

View File

@@ -0,0 +1,140 @@
package com.dcsoft.system.visitor.domain;
import com.dcsoft.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class VisStuffInfoVo extends BaseEntity {
private Long id;
/**
* 出门申请id
*/
private Long exitId;
private List<Long> exitIds;
/**
* 物资名称
*/
private String name;
/**
* 物资用途
*/
private String purpose;
/**
* 物资类型
*/
private String type;
/**
* 物资类型名称
*/
private String typeName;
/**
* 规格型号
*/
private String model;
/**
* 计量单位
*/
private String unit;
/**
* 数量
*/
private Integer number;
/**
* 图片地址
*/
private String imgUrls;
/**
* 图片地址集合
*/
private List<String> imgUrlList;
/**
* 备注
*/
private String remark;
/**
* 是否返厂01
*/
private Integer isBack;
/**
* 返厂日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date backTime;
/**
* 返厂物资名称
*/
private String backName;
/**
* 返厂物资用途
*/
private String backPurpose;
/**
* 返厂物资类型
*/
private String backType;
/**
* 返厂物资类型名称
*/
private String backTypeName;
/**
* 返厂规格型号
*/
private String backModel;
/**
* 返厂计量单位
*/
private String backUnit;
/**
* 返厂数量
*/
private Integer backNumber;
/**
* 返厂图片地址
*/
private String backImgUrls;
/**
* 返厂图片地址集合
*/
private List<String> backImgUrlList;
/**
* 返厂备注
*/
private String backRemark;
/**
* 排序
*/
private Integer sort;
}

View File

@@ -31,7 +31,7 @@ public class VisVisitorExamine extends BaseEntity
private Long visitorId;
/** 访客id */
private Long stuffId;
private Long exitId;
/** 准入时间起 */
@Excel(name = "准入时间起")
@@ -66,12 +66,12 @@ passwordPermission 密码权限 */
private String rejectReason;
public Long getStuffId() {
return stuffId;
public Long getExitId() {
return exitId;
}
public void setStuffId(Long stuffId) {
this.stuffId = stuffId;
public void setExitId(Long exitId) {
this.exitId = exitId;
}
public String getRejectReason() {

View File

@@ -1,7 +1,8 @@
package com.dcsoft.system.visitor.mapper;
import com.dcsoft.system.visitor.domain.CheckCodeVo;
import com.dcsoft.system.visitor.domain.VisCarryStuffVo;
import com.dcsoft.system.visitor.domain.VisExitOutVo;
import com.dcsoft.system.visitor.domain.VisStuffInfoVo;
import com.dcsoft.system.visitor.domain.VisitorReviewProcessVo;
import org.apache.ibatis.annotations.Param;
@@ -9,19 +10,23 @@ import java.util.List;
public interface VisCarryStuffMapper {
List<VisCarryStuffVo> selectList(VisCarryStuffVo vo);
List<VisExitOutVo> selectList(VisExitOutVo vo);
void insertVisCarryStuff(VisCarryStuffVo vo);
void insertVisExitOut(VisExitOutVo vo);
VisCarryStuffVo selectVisStuffById(Long id);
VisExitOutVo selectVisStuffById(Long id);
CheckCodeVo selectStuffCheckCode(@Param("stuffId") Long id);
CheckCodeVo selectStuffCheckCode(@Param("exitId") Long id);
void updateStaff(VisCarryStuffVo vo);
void updateStaff(VisExitOutVo vo);
List<VisitorReviewProcessVo> queryVisitorReviewProcessList(Long id);
void saveVisitorReviewProcess(VisCarryStuffVo vo);
void saveVisitorReviewProcess(VisExitOutVo vo);
VisitorReviewProcessVo queryReviewProcessNew(VisCarryStuffVo stuffVo);
VisitorReviewProcessVo queryReviewProcessNew(VisExitOutVo stuffVo);
void insertVisStuffInfo(@Param("list") List<VisStuffInfoVo> visStuffInfoList);
List<VisStuffInfoVo> selectStuffList(VisStuffInfoVo visStuffInfoVo);
}

View File

@@ -0,0 +1,15 @@
package com.dcsoft.system.visitor.mapper;
import com.dcsoft.system.visitor.domain.*;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface VisExitOutRecordMapper {
List<VisExitOutRecordVo> selectList(VisExitOutRecordVo vo);
VisExitOutRecordVo selectExitOutRecordById(Long id);
void insertExitOutRecord(VisExitOutRecordVo vo);
}

View File

@@ -1,27 +1,28 @@
package com.dcsoft.system.visitor.service;
import com.dcsoft.system.visitor.domain.CheckCodeVo;
import com.dcsoft.system.visitor.domain.VisCarryStuffVo;
import com.dcsoft.system.visitor.domain.Visitor;
import com.dcsoft.system.visitor.domain.VisitorReviewProcessVo;
import com.dcsoft.system.visitor.domain.*;
import java.util.List;
public interface IVisCarryStuffService {
List<VisCarryStuffVo> selectList(VisCarryStuffVo vo);
List<VisExitOutVo> selectList(VisExitOutVo vo);
void insertVisCarryStuff(VisCarryStuffVo vo);
void insertVisExitOut(VisExitOutVo vo);
VisCarryStuffVo selectVisStuffById(Long id);
VisExitOutVo selectVisStuffById(Long id);
CheckCodeVo selectStuffCheckCode(Long id);
void updateStaff(VisCarryStuffVo vo);
void updateStaff(VisExitOutVo vo);
List<VisitorReviewProcessVo> queryVisitorReviewProcessList(Long id);
void saveVisitorReviewProcess(VisCarryStuffVo vo);
void saveVisitorReviewProcess(VisExitOutVo vo);
VisitorReviewProcessVo queryReviewProcessNew(VisCarryStuffVo stuffVo);
VisitorReviewProcessVo queryReviewProcessNew(VisExitOutVo stuffVo);
void insertVisStuffInfo(List<VisStuffInfoVo> visStuffInfoList);
List<VisStuffInfoVo> selectStuffList(VisStuffInfoVo vo);
}

View File

@@ -0,0 +1,14 @@
package com.dcsoft.system.visitor.service;
import com.dcsoft.system.visitor.domain.*;
import java.util.List;
public interface IVisExitOutRecordService {
List<VisExitOutRecordVo> selectList(VisExitOutRecordVo vo);
VisExitOutRecordVo selectExitOutRecordById(Long id);
void insertExitOutRecord(VisExitOutRecordVo vo);
}

View File

@@ -4,10 +4,7 @@ import com.dcsoft.common.core.constant.Constants;
import com.dcsoft.common.core.enums.ExamineEnum;
import com.dcsoft.common.security.utils.SecurityUtils;
import com.dcsoft.system.api.model.LoginUser;
import com.dcsoft.system.visitor.domain.CheckCodeVo;
import com.dcsoft.system.visitor.domain.VisCarryStuffVo;
import com.dcsoft.system.visitor.domain.Visitor;
import com.dcsoft.system.visitor.domain.VisitorReviewProcessVo;
import com.dcsoft.system.visitor.domain.*;
import com.dcsoft.system.visitor.mapper.VisCarryStuffMapper;
import com.dcsoft.system.visitor.mapper.VisitorMapper;
import com.dcsoft.system.visitor.service.IVisCarryStuffService;
@@ -30,21 +27,33 @@ public class VisCarryStuffImpl implements IVisCarryStuffService {
private VisitorMapper visitorMapper;
@Override
public List<VisCarryStuffVo> selectList(VisCarryStuffVo vo) {
public List<VisExitOutVo> selectList(VisExitOutVo vo) {
return visCarryStuffMapper.selectList(vo);
}
@Override
public void insertVisCarryStuff(VisCarryStuffVo vo) {
public void insertVisExitOut(VisExitOutVo vo) {
LoginUser loginUser = SecurityUtils.getLoginUser();
vo.setCreateBy(loginUser.getUsername());
vo.setUserId(loginUser.getUserid());
vo.setExamineState(ExamineEnum.IN_REVIEW.getCode());
vo.setExamineState(ExamineEnum.IN_REVIEW.getCode());
visCarryStuffMapper.insertVisCarryStuff(vo);
visCarryStuffMapper.insertVisExitOut(vo);
}
@Override
public VisCarryStuffVo selectVisStuffById(Long id) {
public void insertVisStuffInfo(List<VisStuffInfoVo> visStuffInfoList) {
LoginUser loginUser = SecurityUtils.getLoginUser();
visStuffInfoList.forEach(vo -> vo.setCreateBy(loginUser.getUsername()));
visCarryStuffMapper.insertVisStuffInfo(visStuffInfoList);
}
@Override
public List<VisStuffInfoVo> selectStuffList(VisStuffInfoVo visStuffInfoVo) {
return visCarryStuffMapper.selectStuffList(visStuffInfoVo);
}
@Override
public VisExitOutVo selectVisStuffById(Long id) {
return visCarryStuffMapper.selectVisStuffById(id);
}
@@ -54,7 +63,7 @@ public class VisCarryStuffImpl implements IVisCarryStuffService {
}
@Override
public void updateStaff(VisCarryStuffVo vo) {
public void updateStaff(VisExitOutVo vo) {
visCarryStuffMapper.updateStaff(vo);
}
@@ -64,12 +73,12 @@ public class VisCarryStuffImpl implements IVisCarryStuffService {
}
@Override
public void saveVisitorReviewProcess(VisCarryStuffVo vo) {
public void saveVisitorReviewProcess(VisExitOutVo vo) {
visCarryStuffMapper.saveVisitorReviewProcess(vo);
}
@Override
public VisitorReviewProcessVo queryReviewProcessNew(VisCarryStuffVo stuffVo) {
public VisitorReviewProcessVo queryReviewProcessNew(VisExitOutVo stuffVo) {
return visCarryStuffMapper.queryReviewProcessNew(stuffVo);
}
}

View File

@@ -0,0 +1,38 @@
package com.dcsoft.system.visitor.service.impl;
import com.dcsoft.common.core.enums.ExamineEnum;
import com.dcsoft.common.security.utils.SecurityUtils;
import com.dcsoft.system.api.model.LoginUser;
import com.dcsoft.system.visitor.domain.*;
import com.dcsoft.system.visitor.mapper.VisCarryStuffMapper;
import com.dcsoft.system.visitor.mapper.VisExitOutRecordMapper;
import com.dcsoft.system.visitor.mapper.VisitorMapper;
import com.dcsoft.system.visitor.service.IVisCarryStuffService;
import com.dcsoft.system.visitor.service.IVisExitOutRecordService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class VisExitOutRecordImpl implements IVisExitOutRecordService {
@Resource
private VisExitOutRecordMapper visExitOutRecordMapper;
@Override
public List<VisExitOutRecordVo> selectList(VisExitOutRecordVo vo) {
return visExitOutRecordMapper.selectList(vo);
}
@Override
public VisExitOutRecordVo selectExitOutRecordById(Long id) {
return visExitOutRecordMapper.selectExitOutRecordById(id);
}
@Override
public void insertExitOutRecord(VisExitOutRecordVo vo) {
visExitOutRecordMapper.insertExitOutRecord(vo);
}
}

View File

@@ -4,16 +4,16 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dcsoft.system.visitor.mapper.VisCarryStuffMapper">
<resultMap type="VisCarryStuffVo" id="VisitorResult">
<resultMap type="VisExitOutVo" id="VisitorResult">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="name" column="name"/>
<result property="phone" column="phone"/>
<result property="exitPermitNo" column="exit_permit_no"/>
<result property="peopleId" column="people_id"/>
<result property="visitingUnit" column="visiting_unit"/>
<result property="stuffName" column="stuff_name"/>
<result property="stuffType" column="stuff_type"/>
<result property="stuffNumber" column="stuff_number"/>
<result property="imgUrls" column="img_urls"/>
<result property="visTime" column="vis_time"/>
<result property="carNo" column="car_no"/>
<result property="reviewer1" column="reviewer1"/>
<result property="reviewer2" column="reviewer2"/>
<result property="reviewer3" column="reviewer3"/>
@@ -24,75 +24,101 @@
<result property="updateTime" column="update_time"/>
<result property="vehicle" column="vehicle"/>
<result property="currentNode" column="current_node"/>
<!-- <association property="examine" column="id" javaType="VisStuffInfoVo" resultMap="StuffResult"/>-->
</resultMap>
<sql id="selectVisCarryStuffVo">
<resultMap type="VisStuffInfoVo" id="StuffResult">
<result property="id" column="id"/>
<result property="exitId" column="exit_id"/>
<result property="name" column="name"/>
<result property="purpose" column="purpose"/>
<result property="type" column="type"/>
<result property="model" column="model"/>
<result property="unit" column="unit"/>
<result property="number" column="number"/>
<result property="imgUrls" column="img_urls"/>
<result property="remark" column="remark"/>
<result property="isBack" column="is_back"/>
<result property="backTime" column="back_time"/>
<result property="remark" column="remark"/>
<result property="backName" column="back_name"/>
<result property="backPurpose" column="back_purpose"/>
<result property="backType" column="back_type"/>
<result property="backModel" column="back_model"/>
<result property="backUnit" column="back_unit"/>
<result property="backNumber" column="back_number"/>
<result property="backImgUrls" column="back_img_urls"/>
<result property="backRemark" column="back_remark"/>
<result property="sort" column="sort"/>
</resultMap>
<sql id="selectVisExitOutVo">
select distinct
id,
name,
user_id,
visiting_unit,
stuff_name,
stuff_type,
stuff_number,
img_urls,
vis_time,
reviewer1,
reviewer2,
reviewer3,
examine_state,
create_by,
create_time,
update_by,
update_time,
vehicle,
current_node
from vis_carry_stuff_out
e.id,
e.user_id,
e.name,
e.phone,
e.`exit_permit_no`,
e.`people_id`,
e.visiting_unit,
e.`car_no`,
e.vis_time,
e.reviewer1,
e.reviewer2,
e.reviewer3,
e.examine_state,
e.create_by,
e.create_time,
e.update_by,
e.update_time,
e.vehicle,
e.current_node
from vis_exit_out e
</sql>
<update id="updateStaff">
update vis_carry_stuff_out
update vis_exit_out
<trim prefix="SET" suffixOverrides=",">
<if test="userId != null">user_id = #{userId},</if>
<if test="name != null and name != ''"> `name` = #{name},</if>
<if test="phone != null and phone != ''"> `phone` = #{phone},</if>
<if test="exitPermitNo != null and exitPermitNo != ''"> `exit_permit_no` = #{exitPermitNo},</if>
<if test="peopleId != null and peopleId != ''"> `people_id` = #{peopleId},</if>
<if test="visitingUnit != null and visitingUnit != ''">visiting_unit = #{visitingUnit},</if>
<if test="stuffName != null and stuffName != ''">stuff_name = #{stuffName},</if>
<if test="stuffType != null and stuffType != ''">stuff_type = #{stuffType},</if>
<if test="stuffNumber != null and stuffNumber != ''">stuff_number = #{stuffNumber},</if>
<if test="imgUrls != null and imgUrls != ''">img_urls = #{imgUrls},</if>
<if test="visTime != null">vis_time = #{visTime},</if>
<if test="vehicle != null and vehicle != ''">vehicle = #{vehicle},</if>
<if test="carNo != null and carNo != ''">car_no = #{carNo},</if>
<if test="reviewer1 != null">reviewer1 = #{reviewer1},</if>
<if test="reviewer2 != null">reviewer2 = #{reviewer2},</if>
<if test="reviewer3 != null">reviewer3 = #{reviewer3},</if>
<if test="examineState != null and examineState != ''">examine_state = #{examineState},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="vehicle != null">vehicle = #{vehicle},</if>
<if test="currentNode != null">current_node = #{currentNode},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
</trim>
where id = #{id}
</update>
<select id="selectList" resultType="com.dcsoft.system.visitor.domain.VisCarryStuffVo">
<include refid="selectVisCarryStuffVo"/>
<select id="selectList" resultType="com.dcsoft.system.visitor.domain.VisExitOutVo">
<include refid="selectVisExitOutVo"/>
<where>
<if test="id != null">and id = #{id}</if>
<if test="name != null and name != ''">and `name` like concat('%', #{name}, '%')</if>
<if test="createBy != null ">and create_by = #{createBy}</if>
<if test="userId != null ">and user_id = #{userId}</if>
<if test="examineState != null and examineState != 3">and examine_state = #{examineState}</if>
<if test="id != null">and e.id = #{id}</if>
<if test="name != null and name != ''">and e.`name` like concat('%', #{name}, '%')</if>
<if test="createBy != null ">and e.create_by = #{createBy}</if>
<if test="userId != null ">and e.user_id = #{userId}</if>
<if test="examineState != null and examineState != 3">and e.examine_state = #{examineState}</if>
</where>
</select>
<select id="selectVisStuffById" resultType="com.dcsoft.system.visitor.domain.VisCarryStuffVo">
<include refid="selectVisCarryStuffVo"/>
where id = #{id}
<select id="selectVisStuffById" resultType="com.dcsoft.system.visitor.domain.VisExitOutVo">
<include refid="selectVisExitOutVo"/>
where e.id = #{id}
</select>
<select id="selectStuffCheckCode" resultType="com.dcsoft.system.visitor.domain.CheckCodeVo">
select
code
from vis_check_code
where stuff_id = #{stuffId}
where exit_id = #{exitId}
order by created_time desc
limit 1
</select>
@@ -105,7 +131,7 @@
sp.name reviewerName
from vis_visitor_review_process vvrp
left join sys_people sp on vvrp.reviewer = sp.id and sp.del_flag = '0'
where stuff_id = #{id}
where exit_id = #{id}
order by ifnull(createdTime, 'zzz')
</select>
@@ -115,23 +141,60 @@
state,
reject_reason
from vis_visitor_review_process
where stuff_id = #{id}
where exit_id = #{id}
order by created_time desc
limit 1
</select>
<insert id="insertVisCarryStuff" useGeneratedKeys="true" keyProperty="id">
insert into vis_carry_stuff_out
<select id="selectStuffList" resultMap="StuffResult">
select
`id`,
`exit_id`,
`name`,
`purpose`,
`type`,
`model`,
`unit`,
`number`,
`img_urls`,
`remark`,
`is_back`,
`back_time`,
`back_name`,
`back_purpose`,
`back_type`,
`back_model`,
`back_unit`,
`back_number`,
`back_img_urls`,
`back_remark`,
`sort`
from vis_stuff_info
<where>
<if test="exitId != null">and exit_id = #{exitId}</if>
<if test="name != null and name != ''">and `name` like concat('%', #{name}, '%')</if>
<if test="createBy != null ">and e.create_by = #{createBy}</if>
<if test="exitIds != null and exitIds.size() > 0">
exit_id in
<foreach item="id" collection="exitIds" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
<insert id="insertVisExitOut" useGeneratedKeys="true" keyProperty="id">
insert into vis_exit_out
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">id,</if>
<if test="userId != null">user_id,</if>
<if test="name != null and name != ''">`name`,</if>
<if test="phone != null and phone != ''">`phone`,</if>
<if test="exitPermitNo != null and exitPermitNo != ''">`exit_permit_no`,</if>
<if test="peopleId != null and peopleId != ''">`people_id`,</if>
<if test="visitingUnit != null and visitingUnit != ''">visiting_unit,</if>
<if test="stuffName != null and stuffName != ''">stuff_name,</if>
<if test="stuffType != null and stuffType != ''">stuff_type,</if>
<if test="stuffNumber != null and stuffNumber != ''">stuff_number,</if>
<if test="imgUrls != null and imgUrls != ''">img_urls,</if>
<if test="visTime != null">vis_time,</if>
<if test="carNo != null and carNo != ''">car_no,</if>
<if test="reviewer1 != null">reviewer1,</if>
<if test="reviewer2 != null">reviewer2,</if>
<if test="reviewer3 != null">reviewer3,</if>
@@ -144,12 +207,12 @@
<if test="id != null and id != ''">#{id},</if>
<if test="userId != null">#{userId},</if>
<if test="name != null and name != ''">#{name},</if>
<if test="phone != null and phone != ''">#{phone},</if>
<if test="exitPermitNo != null and exitPermitNo != ''">#{exitPermitNo},</if>
<if test="peopleId != null and peopleId != ''">#{peopleId},</if>
<if test="visitingUnit != null and visitingUnit != ''">#{visitingUnit},</if>
<if test="stuffName != null and stuffName != ''">#{stuffName},</if>
<if test="stuffType != null and stuffType != ''">#{stuffType},</if>
<if test="stuffNumber != null and stuffNumber != ''">#{stuffNumber},</if>
<if test="imgUrls != null and imgUrls != ''">#{imgUrls},</if>
<if test="visTime != null">#{visTime},</if>
<if test="carNo != null and carNo != ''">#{carNo},</if>
<if test="reviewer1 != null">#{reviewer1},</if>
<if test="reviewer2 != null">#{reviewer2},</if>
<if test="reviewer3 != null">#{reviewer3},</if>
@@ -160,7 +223,7 @@
</trim>
</insert>
<insert id="saveVisitorReviewProcess">
insert into vis_visitor_review_process (id, stuff_id, reviewer
insert into vis_visitor_review_process (id, exit_id, reviewer
<if test="state != null and state != ''">
,state
</if>
@@ -171,4 +234,53 @@
</if>)
</insert>
<insert id="insertVisStuffInfo">
INSERT INTO vis_stuff_info (
exit_id,
`name`,
purpose,
type,
model,
unit,
number,
img_urls,
remark,
is_back,
back_time,
back_name,
back_purpose,
back_type,
back_model,
back_unit,
back_number,
back_img_urls,
back_remark,
sort
) VALUES
<foreach collection="list" item="i" index="index" separator=",">
(
#{i.exitId},
#{i.name},
#{i.purpose},
#{i.type},
#{i.model},
#{i.unit},
#{i.number},
#{i.imgUrls},
#{i.remark},
#{i.isBack},
#{i.backTime},
#{i.backName},
#{i.backPurpose},
#{i.backType},
#{i.backModel},
#{i.backUnit},
#{i.backNumber},
#{i.backImgUrls},
#{i.backRemark,},
#{i.sort}
)
</foreach>
</insert>
</mapper>

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dcsoft.system.visitor.mapper.VisExitOutRecordMapper">
<resultMap type="VisExitOutRecordVo" id="VisitorResult">
<result property="id" column="id"/>
<result property="exitId" column="exit_id"/>
<result property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<sql id="selectVisExitOutRecordVo">
select distinct
r.id,
r.exit_id,
r.user_id,
r.user_name,
r.create_by,
r.create_time,
r.update_by,
r.update_time
from vis_exit_out_record r
</sql>
<select id="selectList" resultType="com.dcsoft.system.visitor.domain.VisExitOutRecordVo">
select distinct
r.id,
r.exit_id,
r.user_id,
r.create_by,
r.create_time,
r.update_by,
r.update_time,
p.name,
from vis_exit_out_record r
left join sys_people p on r.user_id = p.id
<where>
<if test="id != null">and r.id = #{id}</if>
<if test="name != null and name != ''">and r.`name` like concat('%', #{name}, '%')</if>
<if test="createBy != null ">and r.create_by = #{createBy}</if>
<if test="userId != null ">and r.user_id = #{userId}</if>
</where>
</select>
<select id="selectExitOutRecordById" resultType="com.dcsoft.system.visitor.domain.VisExitOutRecordVo">
<include refid="selectVisExitOutRecordVo"/>
where r.id = #{id}
</select>
<insert id="insertExitOutRecord">
insert into vis_exit_out_record
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">id,</if>
<if test="userId != null">user_id,</if>
<if test="userName != null and userName != ''">user_name,</if>
<if test="exitId != null">`exit_id`,</if>
<if test="createBy != null">create_by,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">#{id},</if>
<if test="userId != null">#{userId},</if>
<if test="userName != null and userName != ''">#{userName},</if>
<if test="exitId != null">#{exitId},</if>
<if test="createBy != null">#{createBy},</if>
</trim>
</insert>
</mapper>