主要是針對客戶對於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 "";
}