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 "";
  	}

 

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