SpringBoot利用java反射机制,实现灵活读取Excel表格中的数据和导出数据至Excel表格(2)

主要是针对客户对于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 "";
  	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章