diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/domain/vo/IdNamelVo.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/domain/vo/IdNamelVo.java new file mode 100644 index 0000000..3442f3a --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/domain/vo/IdNamelVo.java @@ -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; + +} diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisCarryStuffController.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisCarryStuffController.java index 0b1c74c..08cfc81 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisCarryStuffController.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisCarryStuffController.java @@ -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 list = visCarryStuffService.selectList(vo); + if (CollUtil.isEmpty(list)) { + return getDataTable(list); + } + //查询物品信息列表 + List collect = list.stream().map(VisExitOutVo::getId).collect(Collectors.toList()); + VisStuffInfoVo visStuffInfoVo = new VisStuffInfoVo(); + visStuffInfoVo.setExitIds(collect); + List stuffList = visCarryStuffService.selectStuffList(visStuffInfoVo); + if (CollUtil.isEmpty(stuffList)) { + return getDataTable(list); + } + + //处理字典值 Map map = dictDataService.queryDictData("vis_out_stuff_type"); - List 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> 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 map = dictDataService.queryDictData("vis_out_stuff_type"); - List 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 stuffList = visCarryStuffService.selectStuffList(visStuffInfoVo); + if (CollUtil.isNotEmpty(stuffList)) { + //处理字典 + Map 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 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 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 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 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 peopleList = sysPeopleService.selectSysPeopleLists(people); + List 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); + } } diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisExitOutRecordController.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisExitOutRecordController.java new file mode 100644 index 0000000..efca7cb --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisExitOutRecordController.java @@ -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 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(); + } + +} diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisitorController.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisitorController.java index 7c4419a..90d4b00 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisitorController.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/controller/VisitorController.java @@ -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 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 stuffList = visCarryStuffService.selectStuffList(visStuffInfoVo); + if (CollUtil.isNotEmpty(stuffList)) { + //处理字典 + Map 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 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); } diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/CheckCodeVo.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/CheckCodeVo.java index 8f3cf98..94b30b9 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/CheckCodeVo.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/CheckCodeVo.java @@ -16,7 +16,7 @@ public class CheckCodeVo { private String visitorId; - private String stuffId; + private String exitId; } diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisExitOutRecordVo.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisExitOutRecordVo.java new file mode 100644 index 0000000..0226993 --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisExitOutRecordVo.java @@ -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; + +} diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisCarryStuffVo.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisExitOutVo.java similarity index 80% rename from dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisCarryStuffVo.java rename to dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisExitOutVo.java index f0da188..2208729 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisCarryStuffVo.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisExitOutVo.java @@ -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 visStuffInfoList; + private List reviewProcessList; } diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisStuffInfoVo.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisStuffInfoVo.java new file mode 100644 index 0000000..f74e238 --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisStuffInfoVo.java @@ -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 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 imgUrlList; + + /** + * 备注 + */ + private String remark; + + /** + * 是否返厂0:否,1:是 + */ + 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 backImgUrlList; + + /** + * 返厂备注 + */ + private String backRemark; + + /** + * 排序 + */ + private Integer sort; + + +} diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisVisitorExamine.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisVisitorExamine.java index 8a134be..39dccf5 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisVisitorExamine.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/domain/VisVisitorExamine.java @@ -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() { diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/mapper/VisCarryStuffMapper.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/mapper/VisCarryStuffMapper.java index a8777f8..5a773f3 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/mapper/VisCarryStuffMapper.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/mapper/VisCarryStuffMapper.java @@ -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 selectList(VisCarryStuffVo vo); + List 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 queryVisitorReviewProcessList(Long id); - void saveVisitorReviewProcess(VisCarryStuffVo vo); + void saveVisitorReviewProcess(VisExitOutVo vo); - VisitorReviewProcessVo queryReviewProcessNew(VisCarryStuffVo stuffVo); + VisitorReviewProcessVo queryReviewProcessNew(VisExitOutVo stuffVo); + + void insertVisStuffInfo(@Param("list") List visStuffInfoList); + + List selectStuffList(VisStuffInfoVo visStuffInfoVo); } diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/mapper/VisExitOutRecordMapper.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/mapper/VisExitOutRecordMapper.java new file mode 100644 index 0000000..ff0ab5d --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/mapper/VisExitOutRecordMapper.java @@ -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 selectList(VisExitOutRecordVo vo); + + VisExitOutRecordVo selectExitOutRecordById(Long id); + + void insertExitOutRecord(VisExitOutRecordVo vo); +} diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/IVisCarryStuffService.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/IVisCarryStuffService.java index dbb4fd5..9ebaff0 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/IVisCarryStuffService.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/IVisCarryStuffService.java @@ -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 selectList(VisCarryStuffVo vo); + List 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 queryVisitorReviewProcessList(Long id); - void saveVisitorReviewProcess(VisCarryStuffVo vo); + void saveVisitorReviewProcess(VisExitOutVo vo); - VisitorReviewProcessVo queryReviewProcessNew(VisCarryStuffVo stuffVo); + VisitorReviewProcessVo queryReviewProcessNew(VisExitOutVo stuffVo); + + void insertVisStuffInfo(List visStuffInfoList); + + List selectStuffList(VisStuffInfoVo vo); } diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/IVisExitOutRecordService.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/IVisExitOutRecordService.java new file mode 100644 index 0000000..a12912e --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/IVisExitOutRecordService.java @@ -0,0 +1,14 @@ +package com.dcsoft.system.visitor.service; + +import com.dcsoft.system.visitor.domain.*; + +import java.util.List; + +public interface IVisExitOutRecordService { + + List selectList(VisExitOutRecordVo vo); + + VisExitOutRecordVo selectExitOutRecordById(Long id); + + void insertExitOutRecord(VisExitOutRecordVo vo); +} diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/impl/VisCarryStuffImpl.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/impl/VisCarryStuffImpl.java index d792089..6d45ee5 100644 --- a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/impl/VisCarryStuffImpl.java +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/impl/VisCarryStuffImpl.java @@ -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 selectList(VisCarryStuffVo vo) { + public List 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 visStuffInfoList) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + visStuffInfoList.forEach(vo -> vo.setCreateBy(loginUser.getUsername())); + visCarryStuffMapper.insertVisStuffInfo(visStuffInfoList); + } + + @Override + public List 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); } } diff --git a/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/impl/VisExitOutRecordImpl.java b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/impl/VisExitOutRecordImpl.java new file mode 100644 index 0000000..057f9f3 --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/java/com/dcsoft/system/visitor/service/impl/VisExitOutRecordImpl.java @@ -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 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); + } + +} diff --git a/dcsoft-modules/dcsoft-system/src/main/resources/mapper/system/visitor/VisCarryStuffMapper.xml b/dcsoft-modules/dcsoft-system/src/main/resources/mapper/system/visitor/VisCarryStuffMapper.xml index b9f6dd7..dc0c218 100644 --- a/dcsoft-modules/dcsoft-system/src/main/resources/mapper/system/visitor/VisCarryStuffMapper.xml +++ b/dcsoft-modules/dcsoft-system/src/main/resources/mapper/system/visitor/VisCarryStuffMapper.xml @@ -4,16 +4,16 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + + + - - - - + @@ -24,75 +24,101 @@ + - + + + + + + + + + + + + + + + + + + + + + + + + + + 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 - update vis_carry_stuff_out + update vis_exit_out user_id = #{userId}, `name` = #{name}, + `phone` = #{phone}, + `exit_permit_no` = #{exitPermitNo}, + `people_id` = #{peopleId}, visiting_unit = #{visitingUnit}, - stuff_name = #{stuffName}, - stuff_type = #{stuffType}, - stuff_number = #{stuffNumber}, - img_urls = #{imgUrls}, vis_time = #{visTime}, + vehicle = #{vehicle}, + car_no = #{carNo}, reviewer1 = #{reviewer1}, reviewer2 = #{reviewer2}, reviewer3 = #{reviewer3}, examine_state = #{examineState}, - create_by = #{createBy}, - vehicle = #{vehicle}, current_node = #{currentNode}, + update_by = #{updateBy}, where id = #{id} - + - and id = #{id} - and `name` like concat('%', #{name}, '%') - and create_by = #{createBy} - and user_id = #{userId} - and examine_state = #{examineState} + and e.id = #{id} + and e.`name` like concat('%', #{name}, '%') + and e.create_by = #{createBy} + and e.user_id = #{userId} + and e.examine_state = #{examineState} - + + where e.id = #{id} @@ -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') @@ -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 - - insert into vis_carry_stuff_out + + + + insert into vis_exit_out id, user_id, `name`, + `phone`, + `exit_permit_no`, + `people_id`, visiting_unit, - stuff_name, - stuff_type, - stuff_number, - img_urls, vis_time, + car_no, reviewer1, reviewer2, reviewer3, @@ -144,12 +207,12 @@ #{id}, #{userId}, #{name}, + #{phone}, + #{exitPermitNo}, + #{peopleId}, #{visitingUnit}, - #{stuffName}, - #{stuffType}, - #{stuffNumber}, - #{imgUrls}, #{visTime}, + #{carNo}, #{reviewer1}, #{reviewer2}, #{reviewer3}, @@ -160,7 +223,7 @@ - insert into vis_visitor_review_process (id, stuff_id, reviewer + insert into vis_visitor_review_process (id, exit_id, reviewer ,state @@ -171,4 +234,53 @@ ) + + 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 + + ( + #{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} + ) + + + diff --git a/dcsoft-modules/dcsoft-system/src/main/resources/mapper/system/visitor/VisExitOutRecordMapper.xml b/dcsoft-modules/dcsoft-system/src/main/resources/mapper/system/visitor/VisExitOutRecordMapper.xml new file mode 100644 index 0000000..8868ec8 --- /dev/null +++ b/dcsoft-modules/dcsoft-system/src/main/resources/mapper/system/visitor/VisExitOutRecordMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + 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 + + + + + + + + insert into vis_exit_out_record + + id, + user_id, + user_name, + `exit_id`, + create_by, + + + #{id}, + #{userId}, + #{userName}, + #{exitId}, + #{createBy}, + + + +