Commit dab676b9 authored by 王琮's avatar 王琮

修改邀访导入

parent 8041561c
...@@ -27,7 +27,7 @@ public class OssINfoUtil { ...@@ -27,7 +27,7 @@ public class OssINfoUtil {
SEPARATOR = File.separator; SEPARATOR = File.separator;
} }
@Value("${global.base_upload_location}") @Value("${global.path.base_upload_location}")
private String baseUploadLocation; private String baseUploadLocation;
public OssInfo filePath(MultipartFile multipartFile, String temp) { public OssInfo filePath(MultipartFile multipartFile, String temp) {
......
package org.rcisoft.sys.sysuser.util; package org.rcisoft.sys.sysuser.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.rcisoft.core.constant.CySysCons; import org.rcisoft.core.constant.CySysCons;
import org.rcisoft.core.exception.CyServiceException;
import org.rcisoft.sys.sysuser.dto.ExportUserDTO; import org.rcisoft.sys.sysuser.dto.ExportUserDTO;
import org.rcisoft.sys.sysuser.entity.SysUser; import org.rcisoft.sys.sysuser.entity.SysUser;
import org.rcisoft.sys.visit.dto.ExportVisitInfoDto; import org.rcisoft.sys.visit.dto.ExportVisitInfoDto;
import org.rcisoft.sys.visit.dto.ExportVisitUserDTO; import org.rcisoft.sys.visit.dto.ExportVisitUserDTO;
import org.rcisoft.sys.visit.dto.VisitInformationErrorDTO;
import org.rcisoft.sys.wbac.user.dto.ErrorDTO; import org.rcisoft.sys.wbac.user.dto.ErrorDTO;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ConditionalOnProperty(prefix = "cy.model", name = "permission", havingValue = CySysCons.WORK_BASE) @ConditionalOnProperty(prefix = "cy.model", name = "permission", havingValue = CySysCons.WORK_BASE)
...@@ -79,23 +88,23 @@ public class CheckUtil { ...@@ -79,23 +88,23 @@ public class CheckUtil {
return errorDTO; return errorDTO;
} }
public static ErrorDTO infoNotNull(ExportVisitInfoDto visitInfoDto, int index) { public static VisitInformationErrorDTO infoNotNull(ExportVisitInfoDto visitInfoDto) {
ErrorDTO errorDTO = new ErrorDTO(); VisitInformationErrorDTO errorDTO = new VisitInformationErrorDTO();
Map<Integer, List<String>> notTrues = new HashMap<>();
List<String> notTrue = new ArrayList<>(); List<String> notTrue = new ArrayList<>();
errorDTO.setSuccess(0);
if (StringUtils.isEmpty(visitInfoDto.getUserName())) if (StringUtils.isEmpty(visitInfoDto.getUserName()))
notTrue.add("发起人姓名不能为空"); notTrue.add("邀请人姓名不能为空");
if (StringUtils.isEmpty(visitInfoDto.getPhone())) if (StringUtils.isEmpty(visitInfoDto.getPhone()))
notTrue.add("发起人手机号不能为空"); notTrue.add("邀请人手机号不能为空");
if (StringUtils.isEmpty(visitInfoDto.getVisitReason())) if (StringUtils.isEmpty(visitInfoDto.getVisitReason()))
notTrue.add("访问事由不能为空"); notTrue.add("访问事由不能为空");
if (StringUtils.isEmpty(visitInfoDto.getVisitRegion())) if (StringUtils.isEmpty(visitInfoDto.getVisitRegion()))
notTrue.add("访问区域不能为空"); notTrue.add("访问区域不能为空");
if (ObjectUtil.isEmpty(visitInfoDto.getVisitDate())) if (!isValid(visitInfoDto.getVisitDate(),DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.CHINA))) {
notTrue.add("访问日期不能为空"); notTrue.add("访问日期为空或不符合规范");
if (StringUtils.isEmpty(visitInfoDto.getVisitTime())) }
notTrue.add("访问时间不能为空"); if (!isValid(visitInfoDto.getVisitTime(),DateTimeFormatter.ofPattern("HH:mm", Locale.CHINA))) {
notTrue.add("访问时间为空或不符合规范");
}
if (StringUtils.isEmpty(visitInfoDto.getVisitName())) if (StringUtils.isEmpty(visitInfoDto.getVisitName()))
notTrue.add("访客姓名不能为空"); notTrue.add("访客姓名不能为空");
if (StringUtils.isEmpty(visitInfoDto.getVisitPhone())) if (StringUtils.isEmpty(visitInfoDto.getVisitPhone()))
...@@ -112,12 +121,23 @@ public class CheckUtil { ...@@ -112,12 +121,23 @@ public class CheckUtil {
if (matchList.size() < phone.size()) if (matchList.size() < phone.size())
notTrue.add("访客手机号不符合规范"); notTrue.add("访客手机号不符合规范");
if (notTrue.size() > 0) { if (notTrue.size() > 0) {
errorDTO.setSuccess(1); BeanUtil.copyProperties(visitInfoDto, errorDTO);
notTrues.put(index, notTrue); errorDTO.setError(notTrue.stream().collect(Collectors.joining(",")));
errorDTO.setMap(notTrues);
}
return errorDTO; return errorDTO;
} }
return null;
}
public static boolean isValid(String dateStr, DateTimeFormatter dateFormatter) {
if(StringUtils.isEmpty(dateStr))
return false;
try {
dateFormatter.parse(dateStr);
} catch (DateTimeParseException e) {
return false;
}
return true;
}
public static ErrorDTO visvitNotNull(ExportVisitUserDTO sysUser, int index) { public static ErrorDTO visvitNotNull(ExportVisitUserDTO sysUser, int index) {
ErrorDTO errorDTO = new ErrorDTO(); ErrorDTO errorDTO = new ErrorDTO();
......
...@@ -13,7 +13,6 @@ import org.rcisoft.core.jwt.util.CyJwtUtil; ...@@ -13,7 +13,6 @@ import org.rcisoft.core.jwt.util.CyJwtUtil;
import org.rcisoft.core.operlog.enums.CyLogTypeEnum; import org.rcisoft.core.operlog.enums.CyLogTypeEnum;
import org.rcisoft.core.util.CyEpExcelUtil; import org.rcisoft.core.util.CyEpExcelUtil;
import org.rcisoft.core.util.CyUserUtil; import org.rcisoft.core.util.CyUserUtil;
import org.rcisoft.sys.visit.dto.VisitInformationErrorDTO;
import org.rcisoft.sys.visit.entity.VisitInfoMation; import org.rcisoft.sys.visit.entity.VisitInfoMation;
import org.rcisoft.sys.visit.service.VisitInfomationService; import org.rcisoft.sys.visit.service.VisitInfomationService;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
......
...@@ -5,6 +5,7 @@ import lombok.Data; ...@@ -5,6 +5,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@Data @Data
public class ExportVisitInfoDto { public class ExportVisitInfoDto {
......
package org.rcisoft.sys.visit.dto;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
public class ExportVisitInfomation {
/**
* @desc 邀请人id(员工id)
* @column user_id
* @default
*/
@Excel(name = "邀请人id(员工id)", orderNum = "0", width = 20)
private Integer userId;
/**
* @desc 发起人姓名
* @column user_name
* @default
*/
@Excel(name = "邀请人姓名", orderNum = "1", width = 20)
private String userName;
/**
* @desc 发起人所属部门
* @column dept_name
* @default
*/
@Excel(name = "邀请人所属部门", orderNum = "2", width = 20)
private String deptName;
/**
* @desc 发起人职务
* @column post_name
* @default
*/
@Excel(name = "邀请人职务", orderNum = "3", width = 20)
private String postName;
/**
* @desc 访问事由
* @column visit_reason
* @default
*/
@Excel(name = "访问事由", orderNum = "4", width = 20)
private String visitReason;
/**
* @desc 其他访问事由
* @column visit_reason_other
* @default
*/
@Excel(name = "其他访问事由", orderNum = "4", width = 20)
private String visitReasonOther;
/**
* @desc 访问区域
* @column visit_region
* @default
*/
@Excel(name = "访问区域", orderNum = "5", width = 20)
private String visitRegion;
/**
* @desc 访问日期
* @column visit_date
* @default
*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Excel(name = "访问日期", orderNum = "6", width = 20,exportFormat = "yyyy-MM-dd")
private Date visitDate;
/**
* @desc 访问时间
* @column visit_time
* @default
*/
@Excel(name = "访问时间", orderNum = "7", width = 20)
private String visitTime;
}
package org.rcisoft.sys.visit.dto; package org.rcisoft.sys.visit.dto;
import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.Excel;
import org.rcisoft.sys.visit.dto.ExportVisitInfoDto;
import org.rcisoft.sys.visit.entity.VisitInfoMation;
public class VisitInformationErrorDTO extends ExportVisitInfoDto { public class VisitInformationErrorDTO extends ExportVisitInfoDto {
@Excel(name = "错误提示", orderNum = "8", width = 40) @Excel(name = "错误提示", orderNum = "9", width = 40)
private String error; private String error;
public String getError() { public String getError() {
......
package org.rcisoft.sys.visit.service.impl; package org.rcisoft.sys.visit.service.impl;
import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelUtil;
import com.alibaba.excel.util.FileUtils; import com.alibaba.excel.util.FileUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -102,10 +103,10 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -102,10 +103,10 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
@Autowired @Autowired
private CyDownErrorTxtComp errorTxt; private CyDownErrorTxtComp errorTxt;
@Value("${global.base_upload_location}") @Value("${global.path.base_upload_location}")
private String baseUploadLocation; private String baseUploadLocation;
@Value("${global.temp_location}") @Value("${global.path.temp_location}")
private String tempLocation; private String tempLocation;
@Autowired @Autowired
...@@ -159,7 +160,6 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -159,7 +160,6 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
sysUser.setUsername(u.getVisitPhone()); sysUser.setUsername(u.getVisitPhone());
sysUser.setNormal(); sysUser.setNormal();
List<SysUser> sysUserList = sysUserRepositorys.querySysUsers(sysUser); List<SysUser> sysUserList = sysUserRepositorys.querySysUsers(sysUser);
// 不存在新增 // 不存在新增
if (CollectionUtils.isEmpty(sysUserList)) { if (CollectionUtils.isEmpty(sysUserList)) {
sysUser.setPersonId(UUID.randomUUID().toString()); sysUser.setPersonId(UUID.randomUUID().toString());
...@@ -253,7 +253,6 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -253,7 +253,6 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
regionCode = regionCode.substring(0, regionCode.length() - 1); regionCode = regionCode.substring(0, regionCode.length() - 1);
visitInfomation.setVisitRegionCode(regionCode); visitInfomation.setVisitRegionCode(regionCode);
} }
for (String s : visitInfomation.getVisitRegions()) { for (String s : visitInfomation.getVisitRegions()) {
region = region + s + ','; region = region + s + ',';
} }
...@@ -261,9 +260,7 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -261,9 +260,7 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
region = region.substring(0, region.length() - 1); region = region.substring(0, region.length() - 1);
visitInfomation.setVisitRegion(region); visitInfomation.setVisitRegion(region);
} }
List<VisitUser> visitUsers = visitInfomation.getUserList(); List<VisitUser> visitUsers = visitInfomation.getUserList();
if (visitUsers.size() > 0) { if (visitUsers.size() > 0) {
userService.deleteByVisitId(visitInfomation.getBusinessId()); userService.deleteByVisitId(visitInfomation.getBusinessId());
for (VisitUser visitUser : visitUsers) { for (VisitUser visitUser : visitUsers) {
...@@ -559,11 +556,9 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -559,11 +556,9 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
@Override @Override
public ImportVistInfoDTO importUserExcel(MultipartFile file, HttpServletResponse response) throws ParseException { public ImportVistInfoDTO importUserExcel(MultipartFile file, HttpServletResponse response) throws ParseException {
ImportVistInfoDTO importVistInfoDTO = new ImportVistInfoDTO(); ImportVistInfoDTO importVistInfoDTO = new ImportVistInfoDTO();
Calendar calendar = Calendar.getInstance(); List<VisitInformationErrorDTO> errorDTOArrayList = new ArrayList<>();
String nowTime = new SimpleDateFormat("yyyyMMddHHmmss").format(calendar.getTime());
String fileName = "邀访错误信息" + nowTime + ".txt";
List<Map<Integer, List<String>>> maps = new ArrayList<>();
ExportVisitInfoDto exportVisitInfoDto = new ExportVisitInfoDto(); ExportVisitInfoDto exportVisitInfoDto = new ExportVisitInfoDto();
VisitInformationErrorDTO errorDTO = new VisitInformationErrorDTO();
boolean flag = false; boolean flag = false;
try { try {
flag = CyEpExcelUtil.isFileInUser(file, exportVisitInfoDto, 2); flag = CyEpExcelUtil.isFileInUser(file, exportVisitInfoDto, 2);
...@@ -581,9 +576,9 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -581,9 +576,9 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
//判断整个Excel是不是为空 计算非空数据有多少条 //判断整个Excel是不是为空 计算非空数据有多少条
int information = CyCompareToolUtils.cmpareInformation(visitInfoDtoList); int information = CyCompareToolUtils.cmpareInformation(visitInfoDtoList);
if (information == 0) { if (information == 0) {
throw new CyServiceException("Excel文件不可为空,请检查Excel文件是否填写!"); throw new CyServiceException(500, "Excel文件不可为空,请检查Excel文件是否填写!");
} else if (information > 500) { } else if (information > 500) {
throw new CyServiceException("单次导入数据不可超过500,请检查!"); throw new CyServiceException(500, "单次导入数据不可超过500,请检查!");
} else { } else {
//去除空数据 //去除空数据
try { try {
...@@ -592,41 +587,31 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -592,41 +587,31 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
throw new CyServiceException(CyResSvcExcEnum.ERROR_NETWORK); throw new CyServiceException(CyResSvcExcEnum.ERROR_NETWORK);
} }
//校验 将错误信息放入maps //校验 将错误信息放入maps
int index = 3; //从第3行开始
for (ExportVisitInfoDto visitInfoDto : visitInfoDtoList) { for (ExportVisitInfoDto visitInfoDto : visitInfoDtoList) {
//判断 是否为空 //判断 是否为空
ErrorDTO infoNull = CheckUtil.infoNotNull(visitInfoDto, index); VisitInformationErrorDTO infoNull = CheckUtil.infoNotNull(visitInfoDto);
if (infoNull.getSuccess() == 1) if (infoNull != null)
maps.add(infoNull.getMap()); errorDTOArrayList.add(infoNull);
else else
addINfoList.add(visitInfoDto); addINfoList.add(visitInfoDto);
index++;
} }
} }
if (addINfoList.size() > 0) { if (addINfoList.size() > 0) {
for (ExportVisitInfoDto visitInfoDto : addINfoList) { for (ExportVisitInfoDto visitInfoDto : addINfoList) {
VisitInfoMation visitInfoMation = new VisitInfoMation(); VisitInfoMation visitInfoMation = new VisitInfoMation();
// 根据姓名查询 // 根据姓名查询
SysUser sysUserDTO = new SysUser(); SysUser sysUserDTO = new SysUser();
sysUserDTO.setDeleted(); sysUserDTO.setDeleted();
sysUserDTO.setName(visitInfoDto.getUserName()); sysUserDTO.setName(visitInfoDto.getUserName());
// 校验手机号
Pattern pattern = Pattern.compile("^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9]))\\d{8}$+");
if (visitInfoDto.getPhone().length() != 11) {
throw new CyServiceException(CyResSvcExcEnum.PHONE_DATA_ERROR);
}
Matcher m = pattern.matcher(visitInfoDto.getPhone());
boolean isMatch = m.matches();
if (!isMatch) {
throw new CyServiceException(CyResSvcExcEnum.PHONE_DATA_ERROR);
}
sysUserDTO.setPhone(visitInfoDto.getPhone()); sysUserDTO.setPhone(visitInfoDto.getPhone());
sysUserDTO.setUserType("0"); sysUserDTO.setUserType("0");
// 根据姓名查询员工数据 // 根据姓名查询员工数据
List<SysUser> sysUsers = sysUserRepositorys.querySysUsers(sysUserDTO); List<SysUser> sysUsers = sysUserRepositorys.querySysUsers(sysUserDTO);
if (sysUsers.size() == 0) { if (sysUsers.size() == 0) {
throw new CyServiceException(CyResSvcExcEnum.USER_DATA_ERROR); BeanUtil.copyProperties(visitInfoDto, errorDTO);
errorDTO.setError("不存在对应的员工,请检查邀请人姓名和手机号是否匹配。");
errorDTOArrayList.add(errorDTO);
continue;
} }
SysUser mainUser = sysUsers.get(0); SysUser mainUser = sysUsers.get(0);
visitInfoMation.setUserId(mainUser.getBusinessId()); visitInfoMation.setUserId(mainUser.getBusinessId());
...@@ -699,16 +684,38 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -699,16 +684,38 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
visitInfoMation.setVisitDate(date.parse(visitInfoDto.getVisitDate())); visitInfoMation.setVisitDate(date.parse(visitInfoDto.getVisitDate()));
visitInfoMation.setVisitTime(visitInfoDto.getVisitTime()); visitInfoMation.setVisitTime(visitInfoDto.getVisitTime());
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String time = visitInfoDto.getVisitDate().toString() + " " + visitInfoDto.getVisitTime(); String time = visitInfoDto.getVisitDate() + " " + visitInfoDto.getVisitTime();
visitInfoMation.setVisitRealTime(dateFormat.parse(time)); visitInfoMation.setVisitRealTime(dateFormat.parse(time));
List<VisitUser> userList = new ArrayList<>(); List<VisitUser> userList = new ArrayList<>();
// 判断访客姓名和手机号是否数量匹配 // 判断访客姓名和手机号是否数量匹配
List<String> visitName = Arrays.asList(visitInfoDto.getVisitName().split(",|,")).stream()
.filter(u -> StringUtils.isNotEmpty(u)).collect(Collectors.toList());
List<String> visitPhone = Arrays.asList(visitInfoDto.getVisitPhone().split(",|,")).stream() List<String> visitPhone = Arrays.asList(visitInfoDto.getVisitPhone().split(",|,")).stream()
.filter(p -> StringUtils.isNotEmpty(p)).distinct() .filter(p -> StringUtils.isNotEmpty(p)).distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
List<String> visitName = Arrays.asList(visitInfoDto.getVisitName().split(",|,")).stream()
.filter(u -> StringUtils.isNotEmpty(u)).collect(Collectors.toList());
for (int i = 0; i < visitName.size(); i++) { for (int i = 0; i < visitName.size(); i++) {
// 判断当前访客(用户)是否已经存在
SysUser sysUser = new SysUser();
sysUser.setName(visitName.get(i));
sysUser.setPhone(visitPhone.get(i));
sysUser.setUsername(visitPhone.get(i));
sysUser.setNormal();
List<SysUser> sysUserList = sysUserRepositorys.querySysUsers(sysUser);
// 不存在新增
if (!CollectionUtils.isEmpty(sysUserList)) {
if (sysUserList.get(0).getUserType().equals("0")) {
BeanUtil.copyProperties(visitInfoDto, errorDTO);
errorDTO.setError("员工不能作为访客!");
errorDTOArrayList.add(errorDTO);
continue;
}
if (sysUserList.get(0).getBlacklistFlag().toString().equals("1")) {
BeanUtil.copyProperties(visitInfoDto, errorDTO);
errorDTO.setError("不能邀请黑名单内的访客!");
errorDTOArrayList.add(errorDTO);
continue;
}
}
VisitUser visitUser = new VisitUser(); VisitUser visitUser = new VisitUser();
visitUser.setUserName(visitName.get(i)); visitUser.setUserName(visitName.get(i));
visitUser.setVisitPhone(visitPhone.get(i)); visitUser.setVisitPhone(visitPhone.get(i));
...@@ -716,16 +723,13 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos ...@@ -716,16 +723,13 @@ public class VisitInfomationServiceImpl extends ServiceImpl<VisitInfomationRepos
} }
visitInfoMation.setUserList(userList); visitInfoMation.setUserList(userList);
// 新增 // 新增
if (visitInfoMation.getUserList().size() == visitPhone.size())
persist(visitInfoMation); persist(visitInfoMation);
} }
} }
if (null != maps && maps.size() > 0) { if (null != errorDTOArrayList && errorDTOArrayList.size() > 0) {
importVistInfoDTO.setFilename(fileName); CyEpExcelUtil.exportExcel(errorDTOArrayList, "邀访错误数据", "邀访错误数据",
try { VisitInformationErrorDTO.class, "邀访错误数据.xlsx", response);
exportTxtPaper(maps, fileName);
} catch (Exception e) {
throw new CyServiceException(CyResSvcExcEnum.ERROR_NETWORK);
}
} }
return importVistInfoDTO; return importVistInfoDTO;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment