Java tutorial
/** * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.qihang.winter.poi.excel.imports.base; import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import com.qihang.winter.poi.excel.annotation.Excel; import com.qihang.winter.poi.excel.annotation.ExcelCollection; import com.qihang.winter.poi.excel.entity.params.ExcelImportEntity; import com.qihang.winter.poi.excel.entity.params.ExcelVerifyEntity; import com.qihang.winter.poi.util.PoiPublicUtil; /** * ,Sax * @author Zerrion * @date 201519 ?10:25:53 */ public class ImportBaseService { /** * ? * * @param targetId * @param field * @param excelEntity * @param pojoClass * @param getMethods * @param temp * @throws Exception */ public void addEntityToMap(String targetId, Field field, ExcelImportEntity excelEntity, Class<?> pojoClass, List<Method> getMethods, Map<String, ExcelImportEntity> temp) throws Exception { Excel excel = field.getAnnotation(Excel.class); excelEntity = new ExcelImportEntity(); excelEntity.setType(excel.type()); excelEntity.setSaveUrl(excel.savePath()); excelEntity.setSaveType(excel.imageType()); excelEntity.setReplace(excel.replace()); excelEntity.setDatabaseFormat(excel.databaseFormat()); excelEntity.setVerify(getImportVerify(field)); excelEntity.setSuffix(excel.suffix()); getExcelField(targetId, field, excelEntity, excel, pojoClass); if (getMethods != null) { List<Method> newMethods = new ArrayList<Method>(); newMethods.addAll(getMethods); newMethods.add(excelEntity.getMethod()); excelEntity.setMethods(newMethods); } temp.put(excelEntity.getName(), excelEntity); } /** * ?? * * @param field * @return */ public ExcelVerifyEntity getImportVerify(Field field) { com.qihang.winter.poi.excel.annotation.ExcelVerify verify = field .getAnnotation(com.qihang.winter.poi.excel.annotation.ExcelVerify.class); if (verify != null) { ExcelVerifyEntity entity = new ExcelVerifyEntity(); entity.setEmail(verify.isEmail()); entity.setInterHandler(verify.interHandler()); entity.setMaxLength(verify.maxLength()); entity.setMinLength(verify.minLength()); entity.setMobile(verify.isMobile()); entity.setNotNull(verify.notNull()); entity.setRegex(verify.regex()); entity.setRegexTip(verify.regexTip()); entity.setTel(verify.isTel()); return entity; } return null; } /** * ?? * * * @param exclusions * @param targetId * ID * @param fields * @param excelCollection * @throws Exception */ public void getAllExcelField(String targetId, Field[] fields, Map<String, ExcelImportEntity> excelParams, List<com.qihang.winter.poi.excel.entity.params.ExcelCollectionParams> excelCollection, Class<?> pojoClass, List<Method> getMethods) throws Exception { ExcelImportEntity excelEntity = null; for (int i = 0; i < fields.length; i++) { Field field = fields[i]; if (PoiPublicUtil.isNotUserExcelUserThis(null, field, targetId)) { continue; } if (PoiPublicUtil.isCollection(field.getType())) { // ? com.qihang.winter.poi.excel.entity.params.ExcelCollectionParams collection = new com.qihang.winter.poi.excel.entity.params.ExcelCollectionParams(); collection.setName(field.getName()); Map<String, ExcelImportEntity> temp = new HashMap<String, ExcelImportEntity>(); ParameterizedType pt = (ParameterizedType) field.getGenericType(); Class<?> clz = (Class<?>) pt.getActualTypeArguments()[0]; collection.setType(clz); getExcelFieldList(targetId, PoiPublicUtil.getClassFields(clz), clz, temp, null); collection.setExcelParams(temp); collection.setExcelName(field.getAnnotation(ExcelCollection.class).name()); additionalCollectionName(collection); excelCollection.add(collection); } else if (PoiPublicUtil.isJavaClass(field)) { addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, excelParams); } else { List<Method> newMethods = new ArrayList<Method>(); if (getMethods != null) { newMethods.addAll(getMethods); } newMethods.add(PoiPublicUtil.getMethod(field.getName(), pojoClass)); getAllExcelField(targetId, PoiPublicUtil.getClassFields(field.getType()), excelParams, excelCollection, field.getType(), newMethods); } } } /** * ????? * @param collection */ private void additionalCollectionName( com.qihang.winter.poi.excel.entity.params.ExcelCollectionParams collection) { Set<String> keys = new HashSet<String>(); keys.addAll(collection.getExcelParams().keySet()); for (String key : keys) { collection.getExcelParams().put(collection.getExcelName() + "_" + key, collection.getExcelParams().get(key)); collection.getExcelParams().remove(key); } } public void getExcelField(String targetId, Field field, ExcelImportEntity excelEntity, Excel excel, Class<?> pojoClass) throws Exception { excelEntity.setName(getExcelName(excel.name(), targetId)); String fieldname = field.getName(); excelEntity.setMethod(PoiPublicUtil.getMethod(fieldname, pojoClass, field.getType())); if (StringUtils.isNotEmpty(excel.importFormat())) { excelEntity.setFormat(excel.importFormat()); } else { excelEntity.setFormat(excel.format()); } } public void getExcelFieldList(String targetId, Field[] fields, Class<?> pojoClass, Map<String, ExcelImportEntity> temp, List<Method> getMethods) throws Exception { ExcelImportEntity excelEntity = null; for (int i = 0; i < fields.length; i++) { Field field = fields[i]; if (PoiPublicUtil.isNotUserExcelUserThis(null, field, targetId)) { continue; } if (PoiPublicUtil.isJavaClass(field)) { addEntityToMap(targetId, field, excelEntity, pojoClass, getMethods, temp); } else { List<Method> newMethods = new ArrayList<Method>(); if (getMethods != null) { newMethods.addAll(getMethods); } newMethods.add(PoiPublicUtil.getMethod(field.getName(), pojoClass, field.getType())); getExcelFieldList(targetId, PoiPublicUtil.getClassFields(field.getType()), field.getType(), temp, newMethods); } } } /** * ??? * * @param exportName * @param targetId * @return */ public String getExcelName(String exportName, String targetId) { if (exportName.indexOf("_") < 0) { return exportName; } String[] arr = exportName.split(","); for (String str : arr) { if (str.indexOf(targetId) != -1) { return str.split("_")[0]; } } return null; } public Object getFieldBySomeMethod(List<Method> list, Object t) throws Exception { Method m; for (int i = 0; i < list.size() - 1; i++) { m = list.get(i); t = m.invoke(t, new Object[] {}); } return t; } /** * isNeedSave()excel? * @param params * @param pojoClass * @param isXSSFWorkbook * @param book * @return * @throws Exception */ public String saveThisExcel(com.qihang.winter.poi.excel.entity.ImportParams params, Class<?> pojoClass, boolean isXSSFWorkbook, Workbook book) throws Exception { String path = PoiPublicUtil.getWebRootPath(getSaveExcelUrl(params, pojoClass)); File savefile = new File(path); if (!savefile.exists()) { savefile.mkdirs(); } SimpleDateFormat format = new SimpleDateFormat("yyyMMddHHmmss"); String excelName = format.format(new Date()) + "_" + Math.round(Math.random() * 100000) + (isXSSFWorkbook == true ? ".xlsx" : ".xls"); FileOutputStream fos = new FileOutputStream(path + "/" + excelName); book.write(fos); fos.close(); return excelName; } /** * ??Excel * * @param params * @param pojoClass * @return * @throws Exception */ public String getSaveExcelUrl(com.qihang.winter.poi.excel.entity.ImportParams params, Class<?> pojoClass) throws Exception { String url = ""; if (params.getSaveUrl().equals("upload/excelUpload")) { url = pojoClass.getName().split("\\.")[pojoClass.getName().split("\\.").length - 1]; return params.getSaveUrl() + "/" + url; } return params.getSaveUrl(); } /** * get ??set * * @param setMethods * @param object */ public void setFieldBySomeMethod(List<Method> setMethods, Object object, Object value) throws Exception { Object t = getFieldBySomeMethod(setMethods, object); setMethods.get(setMethods.size() - 1).invoke(t, value); } /** * * @param entity * @param object * @param value * @throws Exception */ public void setValues(ExcelImportEntity entity, Object object, Object value) throws Exception { if (entity.getMethods() != null) { setFieldBySomeMethod(entity.getMethods(), object, value); } else { entity.getMethod().invoke(object, value); } } }