主要是针对客户对于Excel模板不确定,修改可能性较大的情况,针对SpringBoot利用java反射机制,实现灵活读取Excel表格中的数据和导出数据至Excel表格(1)上述的配置文件对于表头的可维护性较差的问题,并且作了长度及类型校验,特做如下修改:
####导入####
#社区版
useInfo.communityImport=软件名称,softwareName,java.lang.String,50|\
版本类型,versionType,java.lang.String,50|\
社区名,community,java.lang.String,255|\
版本号,versionNum,java.lang.String,50|\
版本发布时间,releaseTime,java.util.Date,0|\
版本最后更新时间,updateTime,java.util.Date,0|\
版本说明链接,versionLink,java.lang.String,255|\
开源协议,opensourceProtocol,java.lang.String,20|\
安装节点数,installNode,java.lang.Integer,11|\
安装套数,installNum,java.lang.Integer,11|\
许可证类型,licenseType,java.lang.String,50|\
专利说明,patent,java.lang.String,255|\
使用状态,useStatus,java.lang.String,50|\
引用系统名称,systemName,java.lang.String,50|\
引用系统模块名称,systemTemplateName,java.lang.String,50|\
引用开始时间,useBeginTime,java.util.Date,0|\
引用结束时间,useEndTime,java.util.Date,0|\
已安装补丁记录,installedPatchRecord,java.lang.String,255|\
局方负责人,principal,java.lang.String,50|\
局方负责人电话,principalPhone,java.lang.String,50|\
局方负责人邮箱,principalEmail,java.lang.String,50|\
厂商负责人,mfgrPrincipal,java.lang.String,50|\
厂商负责人电话,mfgrPrincipalPhone,java.lang.String,50|\
厂商负责人邮箱,mfgrPrincipalEmail,java.lang.String,50|\
所属科室,department,java.lang.String,50|\
备注,remark,java.lang.String,255
#商业版
useInfo.businessImport=软件名称,softwareName,java.lang.String,50|\
版本类型,versionType,java.lang.String,50|\
发行厂商中文,distributorCN,java.lang.String,255|\
发行厂商,distributorEN,java.lang.String,255|\
版本号,versionNum,java.lang.String,50|\
版本发布时间,releaseTime,java.util.Date,0|\
版本最后更新时间,updateTime,java.util.Date,0|\
版本说明链接,versionLink,java.lang.String,255|\
开源协议,opensourceProtocol,java.lang.String,20|\
安装节点数,installNode,java.lang.Integer,11|\
安装套数,installNum,java.lang.Integer,11|\
许可证类型,licenseType,java.lang.String,50|\
使用状态,useStatus,java.lang.String,50|\
引用系统名称,systemName,java.lang.String,50|\
引用系统模块名称,systemTemplateName,java.lang.String,50|\
引用开始时间,useBeginTime,java.util.Date,0|\
引用结束时间,useEndTime,java.util.Date,0|\
已安装补丁记录,installedPatchRecord,java.lang.String,255|\
局方负责人,principal,java.lang.String,50|\
局方负责人电话,principalPhone,java.lang.String,50|\
局方负责人邮箱,principalEmail,java.lang.String,50|\
厂商负责人,mfgrPrincipal,java.lang.String,50|\
厂商负责人电话,mfgrPrincipalPhone,java.lang.String,50|\
厂商负责人邮箱,mfgrPrincipalEmail,java.lang.String,50|\
所属科室,department,java.lang.String,50|\
备注,remark,java.lang.String,255
#二次开发版
useInfo.secondDevelopImport=软件名称,softwareName,java.lang.String,50|\
录入情况,insertInfo,java.lang.String,50|\
版本类型,versionType,java.lang.String,50|\
发行厂商中文,distributorCN,java.lang.String,255|\
发行厂商,distributorEN,java.lang.String,255|\
版本号,versionNum,java.lang.String,50|\
版本发布时间,releaseTime,java.util.Date,0|\
版本说明链接,versionLink,java.lang.String,255|\
开源协议,opensourceProtocol,java.lang.String,20|\
安装节点数,installNode,java.lang.Integer,11|\
安装套数,installNum,java.lang.Integer,11|\
许可证类型,licenseType,java.lang.String,50|\
使用状态,useStatus,java.lang.String,50|\
引用系统名称,systemName,java.lang.String,50|\
引用系统模块名称,systemTemplateName,java.lang.String,50|\
引用开始时间,useBeginTime,java.util.Date,0|\
引用结束时间,useEndTime,java.util.Date,0|\
已安装补丁记录,installedPatchRecord,java.lang.String,255|\
局方负责人,principal,java.lang.String,50|\
局方负责人电话,principalPhone,java.lang.String,50|\
局方负责人邮箱,principalEmail,java.lang.String,50|\
厂商负责人,mfgrPrincipal,java.lang.String,50|\
厂商负责人电话,mfgrPrincipalPhone,java.lang.String,50|\
厂商负责人邮箱,mfgrPrincipalEmail,java.lang.String,50|\
所属科室,department,java.lang.String,50|\
二次开发公司,secondDevelop,java.lang.String,255|\
备注,remark,java.lang.String,255
####导出####
#社区版
useInfo.communityExport=软件名称,softwareName,java.lang.String,50|\
版本类型,versionType,java.lang.String,50|\
社区名,community,java.lang.String,255|\
版本号,versionNum,java.lang.String,50|\
软件分组,scene,java.lang.String,50|\
软件类型,softwareType,java.lang.String,50|\
版本发布时间,releaseTime,java.util.Date,0|\
版本最后更新时间,updateTime,java.util.Date,0|\
版本说明链接,versionLink,java.lang.String,255|\
开源协议,opensourceProtocol,java.lang.String,50|\
安装节点数,installNode,java.lang.Integer,11|\
安装套数,installNum,java.lang.Integer,11|\
许可证类型,licenseType,java.lang.String,50|\
专利说明,patent,java.lang.String,255|\
使用状态,useStatus,java.lang.String,50|\
引用系统名称,systemName,java.lang.String,50|\
引用系统模块名称,systemTemplateName,java.lang.String,50|\
引用开始时间,useBeginTime,java.util.Date,0|\
引用结束时间,useEndTime,java.util.Date,0|\
已安装补丁记录,installedPatchRecord,java.lang.String,255|\
局方负责人,principal,java.lang.String,50|\
局方负责人电话,principalPhone,java.lang.String,50|\
局方负责人邮箱,principalEmail,java.lang.String,50|\
厂商负责人,mfgrPrincipal,java.lang.String,50|\
厂商负责人电话,mfgrPrincipalPhone,java.lang.String,50|\
厂商负责人邮箱,mfgrPrincipalEmail,java.lang.String,50|\
所属科室,department,java.lang.String,50|\
备注,remark,java.lang.String,255|\
告警级别,alarmLevel,java.lang.String,2
#商业版
useInfo.businessExport=软件名称,softwareName,java.lang.String,50|\
版本类型,versionType,java.lang.String,50|\
发行厂商中文,distributorCN,java.lang.String,255|\
发行厂商,distributorEN,java.lang.String,255|\
版本号,versionNum,java.lang.String,50|\
软件分组,scene,java.lang.String,50|\
软件类型,softwareType,java.lang.String,50|\
版本发布时间,releaseTime,java.util.Date,0|\
版本最后更新时间,updateTime,java.util.Date,0|\
版本说明链接,versionLink,java.lang.String,255|\
开源协议,opensourceProtocol,java.lang.String,50|\
安装节点数,installNode,java.lang.Integer,11|\
安装套数,installNum,java.lang.Integer,11|\
许可证类型,licenseType,java.lang.String,50|\
使用状态,useStatus,java.lang.String,50|\
引用系统名称,systemName,java.lang.String,50|\
引用系统模块名称,systemTemplateName,java.lang.String,50|\
引用开始时间,useBeginTime,java.util.Date,0|\
引用结束时间,useEndTime,java.util.Date,0|\
已安装补丁记录,installedPatchRecord,java.lang.String,255|\
局方负责人,principal,java.lang.String,50|\
局方负责人电话,principalPhone,java.lang.String,50|\
局方负责人邮箱,principalEmail,java.lang.String,50|\
厂商负责人,mfgrPrincipal,java.lang.String,50|\
厂商负责人电话,mfgrPrincipalPhone,java.lang.String,50|\
厂商负责人邮箱,mfgrPrincipalEmail,java.lang.String,50|\
所属科室,department,java.lang.String,50|\
备注,remark,java.lang.String,255|\
告警级别,alarmLevel,java.lang.String,2
#二次开发版
useInfo.secondDevelopExport=软件名称,softwareName,java.lang.String,50|\
录入情况,insertInfo,java.lang.String,50|\
版本类型,versionType,java.lang.String,50|\
发行厂商中文,distributorCN,java.lang.String,255|\
发行厂商,distributorEN,java.lang.String,255|\
版本号,versionNum,java.lang.String,50|\
软件分组,scene,java.lang.String,50|\
软件类型,softwareType,java.lang.String,50|\
版本发布时间,releaseTime,java.util.Date,0|\
版本说明链接,versionLink,java.lang.String,255|\
开源协议,opensourceProtocol,java.lang.String,50|\
安装节点数,installNode,java.lang.Integer,11|\
安装套数,installNum,java.lang.Integer,11|\
许可证类型,licenseType,java.lang.String,50|\
使用状态,useStatus,java.lang.String,50|\
引用系统名称,systemName,java.lang.String,50|\
引用系统模块名称,systemTemplateName,java.lang.String,50|\
引用开始时间,useBeginTime,java.util.Date,0|\
引用结束时间,useEndTime,java.util.Date,0|\
已安装补丁记录,installedPatchRecord,java.lang.String,255|\
局方负责人,principal,java.lang.String,50|\
局方负责人电话,principalPhone,java.lang.String,50|\
局方负责人邮箱,principalEmail,java.lang.String,50|\
厂商负责人,mfgrPrincipal,java.lang.String,50|\
厂商负责人电话,mfgrPrincipalPhone,java.lang.String,50|\
厂商负责人邮箱,mfgrPrincipalEmail,java.lang.String,50|\
所属科室,department,java.lang.String,50|\
二次开发公司,secondDevelop,java.lang.String,255|\
备注,remark,java.lang.String,255|\
告警级别,alarmLevel,java.lang.String,2
package com.chinamobile.cmss.osmcs.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "useInfo")
@PropertySource(value={"classpath:useInfoTable.properties"},ignoreResourceNotFound = true,encoding = "utf-8")
public class UseInfoTableProperty {
/**
* 社区版导入配置
*/
private String communityImport;
/**
* 商业版导入配置
*/
private String businessImport;
/**
* 二次开发版导入配置
*/
private String secondDevelopImport;
/**
* 社区版导出配置
*/
private String communityExport;
/**
* 商业版导出配置
*/
private String businessExport;
/**
* 二次开发版导出配置
*/
private String secondDevelopExport;
public String getCommunityImport() {
return communityImport;
}
public void setCommunityImport(String communityImport) {
this.communityImport = communityImport;
}
public String getBusinessImport() {
return businessImport;
}
public void setBusinessImport(String businessImport) {
this.businessImport = businessImport;
}
public String getSecondDevelopImport() {
return secondDevelopImport;
}
public void setSecondDevelopImport(String secondDevelopImport) {
this.secondDevelopImport = secondDevelopImport;
}
public String getCommunityExport() {
return communityExport;
}
public void setCommunityExport(String communityExport) {
this.communityExport = communityExport;
}
public String getBusinessExport() {
return businessExport;
}
public void setBusinessExport(String businessExport) {
this.businessExport = businessExport;
}
public String getSecondDevelopExport() {
return secondDevelopExport;
}
public void setSecondDevelopExport(String secondDevelopExport) {
this.secondDevelopExport = secondDevelopExport;
}
}
//检查Excel模板
public void checkUseInfoTemplate(final MultipartFile file) {
LOGGER.info("ExcelUtil checkTemplate begin");
Workbook workBook = null;
final String originalName = file.getOriginalFilename();
if (!originalName.endsWith(".xls")) {
throw new BusinessException(ExceptionEnum.BASE_CHECK_EXCP.setExceptionMsg("文件格式不正确,请先下载导入模板"));
}
try {
workBook = Workbook.getWorkbook(file.getInputStream());
} catch (Exception e) {
LOGGER.error("获取导入文件失败");
throw new BusinessException(ExceptionEnum.BASE_CHECK_EXCP.setExceptionMsg("获取文件失败"));
}
if (workBook != null) {
Sheet[] sheets = workBook.getSheets();
//如果sheet页数量与模板数量不一致,则说明不是模板
if (sheets.length != UseInfoConstant.VERSIONTYPE_ARRAY.length) {
LOGGER.info("导入文件sheet页数量与模板数量不一致");
throw new BusinessException(ExceptionEnum.BASE_CHECK_EXCP.setExceptionMsg("页表数量与模板数量不一致,请先下载导入模板"));
}
//判断是否是模板中的三个sheet页
for (final Sheet sheet : sheets) {
//如果存在非模板中的sheet页,则说明不是模板
if (!Arrays.asList(UseInfoConstant.VERSIONTYPE_ARRAY).contains(sheet.getName())) {
LOGGER.info("导入文件sheet页名称与模板不一致");
throw new BusinessException(ExceptionEnum.BASE_CHECK_EXCP.setExceptionMsg("页表名称与模板不一致,请先下载导入模板"));
}
}
//开始判断没页的表头与模板是否相同
for (Sheet sheet : sheets) {
//获取表头
final Cell[] cells = sheet.getRow(0);
final String[] titles = new String[cells.length];
for (int i = 0; i < cells.length; i++) {
titles[i] = cells[i].getContents();
}
LOGGER.info("titles = " + Arrays.toString(titles));
//社区版
if (UseInfoConstant.VERSIONTYPE_COMMUNITY.equals(sheet.getName())) {
final List<String[]> properityList = getProperities(useInfoTableProperty.getCommunityImport());
String[] communityTitle = properityList.get(0);
LOGGER.info("communityTitle = " + Arrays.toString(communityTitle));
if (communityTitle.length == 0 || titles.length == 0 || !Arrays.toString(communityTitle).equals(Arrays.toString(titles))) {
LOGGER.info("社区版表头与模板不一致");
throw new BusinessException(ExceptionEnum.BASE_CHECK_EXCP.setExceptionMsg("社区版表头与模板不一致,请先下载导入模板"));
}
} else if (UseInfoConstant.VERSIONTYPE_BUSINESS.equals(sheet.getName())) {
final List<String[]> properityList = getProperities(useInfoTableProperty.getBusinessImport());
String[] businessTitle = properityList.get(0);
LOGGER.info("businessTitle = " + Arrays.toString(businessTitle));
if (businessTitle.length == 0 || titles.length == 0 || !Arrays.toString(businessTitle).equals(Arrays.toString(titles))) {
LOGGER.info("社区版表头与模板不一致");
throw new BusinessException(ExceptionEnum.BASE_CHECK_EXCP.setExceptionMsg("社区版表头与模板不一致,请先下载导入模板"));
}
} else if (UseInfoConstant.VERSIONTYPE_SECONDDEVELOP.equals(sheet.getName())) {
final List<String[]> properityList = getProperities(useInfoTableProperty.getSecondDevelopImport());
String[] secondDevelopTitle = properityList.get(0);
LOGGER.info("secondDevelopTitle = " + Arrays.toString(secondDevelopTitle));
if (secondDevelopTitle.length == 0 || titles.length == 0 || !Arrays.toString(secondDevelopTitle).equals(Arrays.toString(titles))) {
LOGGER.info("社区版表头与模板不一致");
throw new BusinessException(ExceptionEnum.BASE_CHECK_EXCP.setExceptionMsg("社区版表头与模板不一致,请先下载导入模板"));
}
}
}
}
}
public boolean importUseInfo(final MultipartFile file, final List<UseInfo> useInfoCommunityList, final List<UseInfo> useInfoBusinessList, final List<UseInfo> useInfoSecondDevelopList, final StringBuilder result) {
boolean flag = true;
boolean communityFlag = true;
boolean businessFlag = true;
boolean secondDevelopFlag = true;
Workbook workBook;
try {
workBook = Workbook.getWorkbook(file.getInputStream());
//社区版
useInfoCommunityList.addAll(importUseInfo(workBook, UseInfoConstant.VERSIONTYPE_COMMUNITY, result));
if (result.toString().contains("false")) {
communityFlag = false;
}
result.append("|");
//商业版
useInfoBusinessList.addAll(importUseInfo(workBook, UseInfoConstant.VERSIONTYPE_BUSINESS, result));
if (result.toString().contains("false")) {
businessFlag = false;
}
result.append("|");
//二次开发版
useInfoSecondDevelopList.addAll(importUseInfo(workBook, UseInfoConstant.VERSIONTYPE_SECONDDEVELOP, result));
if (result.toString().contains("false")) {
secondDevelopFlag = false;
}
if (!(communityFlag && businessFlag && secondDevelopFlag)) {
flag = false;
}
} catch (final Exception e) {
LOGGER.info("导入使用情况失败", e);
flag = false;
}
return flag;
}
public List<String[]> getProperities (String excelImport) {
List<String[]> list = new ArrayList<>();
LOGGER.info("excelImport = " + excelImport);
final String[] importProperities = excelImport.split("\\|");
final String[] methodNames = new String[importProperities.length];
final String[] titles = new String[importProperities.length];
final String[] fieldTypes = new String[importProperities.length];
final String[] fieldLengths = new String[importProperities.length];
for (int i = 0; i < importProperities.length; i++) {
titles[i] = importProperities[i].split(",")[0];
methodNames[i] = importProperities[i].split(",")[1];
fieldTypes[i] = importProperities[i].split(",")[2];
fieldLengths[i] = importProperities[i].split(",")[3];
}
list.add(titles);
list.add(methodNames);
list.add(fieldTypes);
list.add(fieldLengths);
return list;
}
public List<UseInfo> importUseInfo(final Workbook workBook, final String sheetName, final StringBuilder result) {
//有一个不通过就不通过
boolean flag = true;
final List<UseInfo> list = new ArrayList<>();
// 获取该对象的class对象
Class objClass = UseInfo.class;
// // 获得该类的所有属性
// Field[] fields = objClass.getDeclaredFields();
// 读取excel数据,获得指定的excel表
final Sheet sheet = workBook.getSheet(sheetName);
// 读取表头信息,确定需要用的方法名---set方法
// 用于存储方法名
final String[] methodNames;
final String[] titles;
// 用于存储属性类型
final String[] fieldTypes ;
final String[] fieldLengths ;
List<String[]> properityList = new ArrayList<>();
if (UseInfoConstant.VERSIONTYPE_COMMUNITY.equals(sheetName)) {
properityList = getProperities(useInfoTableProperty.getCommunityImport());
} else if (UseInfoConstant.VERSIONTYPE_BUSINESS.equals(sheetName)) {
properityList = getProperities(useInfoTableProperty.getBusinessImport());
} else if (UseInfoConstant.VERSIONTYPE_SECONDDEVELOP.equals(sheetName)) {
properityList = getProperities(useInfoTableProperty.getSecondDevelopImport());
} else {
return list;
}
if (properityList.size() == 0) {
return list;
}
titles = properityList.get(0);
methodNames = properityList.get(1);
fieldTypes = properityList.get(2);
fieldLengths = properityList.get(3);
if (methodNames.length != titles.length || methodNames.length != fieldTypes.length || methodNames.length != fieldLengths.length) {
LOGGER.info("请系统维护人员检查配置文件(useInfoTable.properties)是否正确");
throw new BusinessException(ExceptionEnum.EXECUTE_RUNTIME_EXCP.setExceptionMsg("请系统维护人员检查配置文件(useInfoTable.properties)是否正确"));
}
for (int i = 0; i < methodNames.length; i++) {
//获取字段对应的方法名称
methodNames[i] = "set" + Character.toUpperCase(methodNames[i].charAt(0)) + methodNames[i].substring(1);
}
final SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd");
final SimpleDateFormat format2 = new SimpleDateFormat("dd/MM/yyyy");
// 逐行读取数据 从1开始 忽略表头
for (int i = 1; i < sheet.getRows(); i++) {
//实例化该泛型类的对象一个对象
Object obj;
try {
obj = objClass.newInstance();
} catch (Exception e) {
LOGGER.error("实例化对象失败");
return list;
}
// 获得本行中各单元格中的数据
String temp = "";
for (int j = 0; j < methodNames.length; j++) {
try {
String data = sheet.getCell(j, i).getContents();
if (StringUtils.isEmpty(data)) {
continue;
}
// 获取要调用方法的方法名
Method method = null;
if ("java.lang.String".equals(fieldTypes[j])) {
// 设置要执行的方法--set方法参数为String
LOGGER.info("methodName=" + methodNames[j]);
method = objClass.getDeclaredMethod(methodNames[j], String.class);
method.invoke(obj, data); // 执行该方法
final String fieldLength = fieldLengths[j];
LOGGER.info("fieldLengths[" +j +"]=" + fieldLength);
if (!StringUtils.isEmpty(fieldLength.trim())) {
temp += Integer.parseInt(fieldLength) >= data.length() ? "" : (titles[j] + "超出设定长度" + fieldLength + ",");
}
} else if ("java.lang.Integer".equals(fieldTypes[j])) {
// 设置要执行的方法--set方法参数为String
LOGGER.info("methodName=" + methodNames[j]);
method = objClass.getDeclaredMethod(methodNames[j], Integer.class);
final String fieldLength = fieldLengths[j];
LOGGER.info("fieldLengths[" +j +"]=" + fieldLength);
//检查字段长度
if (!StringUtils.isEmpty(fieldLength.trim())) {
temp += Integer.parseInt(fieldLength) >= data.length() ? "" : (titles[j] + "超出设定长度" + fieldLength + ",");
if (Integer.parseInt(fieldLength) < data.length()) {
method.invoke(obj, UseInfoConstant.WRONG_NUM);//此处-999用于标记填写有误
}
}
try {
method.invoke(obj, Integer.valueOf(data)); // 执行该方法
} catch (Exception e) {
temp += titles[j] + "是整数,";
method.invoke(obj, UseInfoConstant.WRONG_NUM);//此处-999用于标记填写有误
}
} else if ("java.util.Date".equals(fieldTypes[j])) {
// 设置要执行的方法--set方法参数为String
LOGGER.info("methodName=" + methodNames[j]);
method = objClass.getDeclaredMethod(methodNames[j], Date.class);
if (data.contains(";")) {
data = new String(data.split(";")[0]);
if (!StringUtils.isEmpty(data)) {
try {
method.invoke(obj, format1.parse(data));
} catch (Exception e) {
temp += "时间格式为(2018/10/10),";
}
}
} else if (!StringUtils.isEmpty(data)) {
try {
method.invoke(obj, format2.parse(data));
} catch (ParseException e1) {
temp += "时间格式为(2018/10/10),";
}
}
}
} catch (Exception e2) {
LOGGER.error("设置属性值失败", e2);
}
}
final UseInfo useInfo = (UseInfo)obj;
//根据软件名称匹配软件分组
if (!StringUtils.isEmpty(useInfo.getSoftwareName())) {
final List<String> sceneList = useInfoMapper.getSceneBySoftware(useInfo.getSoftwareName());
if (sceneList != null && sceneList.size() > 0) {
if (!StringUtils.isEmpty(sceneList.get(0))) {
useInfo.setScene(sceneList.get(0));
} else {
useInfo.setScene("其他服务");
}
} else {
useInfo.setScene("其他服务");
}
} else {
useInfo.setScene("其他服务");
}
useInfo.setSoftwareType(useInfoMapper.getSoftTypeBySoftware(useInfo.getSoftwareName()));
final StringBuilder nullNumStringBuilder = new StringBuilder("");
final String error = check(useInfo, nullNumStringBuilder);
final String nullNumStr = nullNumStringBuilder.toString();
if (!StringUtils.isEmpty(nullNumStr) && Integer.valueOf(nullNumStr) > 10) {
if (!StringUtils.isEmpty(temp)) {
flag = false;
result.append(temp.substring(0, temp.length() - 1) + ";");
}
result.append(flag);
return list;
}
temp += error;
if (StringUtils.isEmpty(temp)) {
result.append("内容正确;");
} else {
flag = false;
result.append(temp.substring(0, temp.length() - 1) + ";");
}
list.add(useInfo);
}
result.append(flag);
return list;
}
//检查数据是否合法
public String check (final UseInfo useInfo, final StringBuilder nullNumStr) {
final StringBuilder notNullError = new StringBuilder("");
final StringBuilder notEssentialError = new StringBuilder("");
final StringBuilder notValidError = new StringBuilder("");
//统计必填字段连续为空的个数
int nullNum = 0;
if (StringUtils.isEmpty(useInfo.getSoftwareName())) {
notNullError.append("软件名称不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getVersionType())) {
notNullError.append("版本类型不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getScene())) {
notNullError.append("软件分组不能为空,");
}
if (StringUtils.isEmpty(useInfo.getVersionNum())) {
notNullError.append("版本号不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getSystemName())) {
notNullError.append("引用系统名称不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getSystemTemplateName())) {
notNullError.append("引用系统模块名称不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getOpensourceProtocol())) {
notNullError.append("开源协议不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getLicenseType())) {
notNullError.append("许可证类型不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getInstallNode())) {
notNullError.append("安装节点数不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getInstallNum())) {
notNullError.append("安装套数不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getPrincipal())) {
notNullError.append("局方负责人不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getPrincipalPhone())) {
notNullError.append("局方负责人电话不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getPrincipalEmail())) {
notNullError.append("局方负责人邮箱不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getMfgrPrincipal())) {
notNullError.append("厂商负责人不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getMfgrPrincipalPhone())) {
notNullError.append("厂商负责人电话不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getMfgrPrincipalEmail())) {
notNullError.append("厂商负责人邮箱不能为空,");
nullNum++;
}
if (StringUtils.isEmpty(useInfo.getDepartment())) {
notNullError.append("科室不能为空,");
nullNum++;
}
//如果连续读取的必填字段为空的大于10个则表示该行为空,并且不再读取后面的行
if (nullNum > 10) {
nullNumStr.append(String.valueOf(nullNum));
return "";
}
if (!StringUtils.isEmpty(notNullError.toString())) {
// throw new BusinessException(ExceptionEnum.USEINFO_NOTNULL_EXCP.setExceptionMsg(notNullError.toString()));
return notNullError.toString();
}
//获取所有的版本类型
final List<Object> versionTypeList = dictionaryMapper.getByKeyValue("versionType", useInfo.getVersionType());
if (versionTypeList == null || versionTypeList.size() == 0) {
notValidError.append("版本类型不存在,");
}
//获取所有的科室名称
final List<Object> departmentList = dictionaryMapper.getByKeyValue("department", useInfo.getDepartment());
if (departmentList == null || departmentList.size() == 0) {
notValidError.append("科室不存在,");
}
//获取所有的使用状态
if (!StringUtils.isEmpty(useInfo.getUseStatus())) {
final List<Object> useStatusList = dictionaryMapper.getByKeyValue("useStatus", useInfo.getUseStatus());
if (useStatusList == null || useStatusList.size() == 0) {
notValidError.append("使用状态不存在,");
}
}
//获取所有的开原协议
final List<Object> opensourceProtocolList = dictionaryMapper.getByKeyValue("opensourceProtocol", useInfo.getOpensourceProtocol());
if (opensourceProtocolList == null || opensourceProtocolList.size() == 0) {
notValidError.append("开源协议不存在,");
} else {
useInfo.setOpensourceProtocol((String)opensourceProtocolList.get(0));
}
//获取所有的许可证类型
final List<Object> licenseTypeList = dictionaryMapper.getByKeyValue("licenseType", useInfo.getLicenseType());
if (licenseTypeList == null || licenseTypeList.size() == 0) {
notValidError.append("许可证类型不存在,");
} else {
useInfo.setLicenseType((String)licenseTypeList.get(0));
}
if (!StringUtils.isEmpty(notValidError.toString())) {
// throw new BusinessException(ExceptionEnum.USEINFO_NOTVALID_EXCP.setExceptionMsg(notValidError.toString()));
return notValidError.toString();
}
if (UseInfoConstant.VERSIONTYPE_COMMUNITY.equals(useInfo.getVersionType())) {
//社区版
if (StringUtils.isEmpty(useInfo.getCommunity())) {
notNullError.append("社区版'社区名称'不能为空,");
}
if (!StringUtils.isEmpty(useInfo.getInsertInfo())) {
notEssentialError.append("社区版不存在'录入情况'参数,");
}
if (!StringUtils.isEmpty(useInfo.getDistributorEN()) || !StringUtils.isEmpty(useInfo.getDistributorCN())) {
notEssentialError.append("社区版不存在'发行厂商'参数,");
}
if (!StringUtils.isEmpty(useInfo.getSecondDevelop())) {
notEssentialError.append("社区版不存在'二次开发公司'参数,");
}
} else if (UseInfoConstant.VERSIONTYPE_BUSINESS.equals(useInfo.getVersionType())) {
//商业版
if (StringUtils.isEmpty(useInfo.getDistributorEN()) || StringUtils.isEmpty(useInfo.getDistributorCN())) {
notNullError.append("商业版'发行厂商'不能为空,");
}
if (!StringUtils.isEmpty(useInfo.getCommunity())) {
notEssentialError.append("商业版不存在'社区名称'参数,");
}
if (!StringUtils.isEmpty(useInfo.getPatent())) {
notEssentialError.append("商业版不存在'专利说明'参数,");
}
if (!StringUtils.isEmpty(useInfo.getInsertInfo())) {
notEssentialError.append("商业版不存在'录入情况'参数,");
}
if (!StringUtils.isEmpty(useInfo.getSecondDevelop())) {
notEssentialError.append("商业版不存在'二次开发公司'参数,");
}
} else if (UseInfoConstant.VERSIONTYPE_SECONDDEVELOP.equals(useInfo.getVersionType())) {
//二次开发版
if (StringUtils.isEmpty(useInfo.getDistributorEN()) || StringUtils.isEmpty(useInfo.getDistributorCN())) {
notNullError.append("二次开发版'发行厂商'不能为空,");
}
if (StringUtils.isEmpty(useInfo.getSecondDevelop())) {
notNullError.append("二次开发版'二次开发公司'不能为空,");
}
if (!StringUtils.isEmpty(useInfo.getCommunity())) {
notEssentialError.append("二次开发版不存在'社区名称'参数,");
}
if (!StringUtils.isEmpty(useInfo.getPatent())) {
notEssentialError.append("二次开发版不存在'专利说明'参数,");
}
if (!StringUtils.isEmpty(useInfo.getUpdateTime())) {
notEssentialError.append("二次开发版不存在'版本最后更新时间'参数,");
}
}
if (!StringUtils.isEmpty(notNullError.toString()) || !StringUtils.isEmpty(notEssentialError.toString())) {
return notNullError.append(notEssentialError.toString()).toString();
}
return "";
}