From a9631bf0505ac256d276b060dc05d99ea971d877 Mon Sep 17 00:00:00 2001 From: david-PC\david <kimi42345@gmail.com> Date: 星期二, 12 六月 2018 17:13:50 +0800 Subject: [PATCH] 修改了Engine的流程(第一次) --- /dev/null | 277 ---------------------------------------------- source/my/frame/src/frame/file/office/Engine.java | 64 +++++++++- source/my/frame/src/frame/file/FileIOContainer.java | 7 + source/my/frame/src/frame/file/office/LoadManager.java | 8 4 files changed, 66 insertions(+), 290 deletions(-) diff --git a/source/my/frame/src/frame/file/FileIOContainer.java b/source/my/frame/src/frame/file/FileIOContainer.java index 2069bb9..4478e11 100644 --- a/source/my/frame/src/frame/file/FileIOContainer.java +++ b/source/my/frame/src/frame/file/FileIOContainer.java @@ -15,6 +15,7 @@ public class FileIOContainer { + public static boolean Debug = true; private static FileIOContainer instance; private static Object locker = new Object(); @@ -58,6 +59,12 @@ return instance.fileIOMap.get(ioCode); } + public static void tryLoad() throws Exception { + if (Debug) { + load(); + } + } + public static void load() throws Exception { getInstance(); NamedSQL namedSQL; diff --git a/source/my/frame/src/frame/file/LoadError.java b/source/my/frame/src/frame/file/LoadError.java deleted file mode 100644 index f05e262..0000000 --- a/source/my/frame/src/frame/file/LoadError.java +++ /dev/null @@ -1,15 +0,0 @@ -package frame.file; - -public enum LoadError { - SheetNotFound,SQLRunError,Non; - - private String message; - - public void setMessage(String message) { - this.message = toString() + ": --" + message; - } - - public String getMessage() { - return null; - } -} diff --git a/source/my/frame/src/frame/file/office/Engine.java b/source/my/frame/src/frame/file/office/Engine.java index 2623e37..7eafd16 100644 --- a/source/my/frame/src/frame/file/office/Engine.java +++ b/source/my/frame/src/frame/file/office/Engine.java @@ -22,10 +22,16 @@ import frame.call.writer.JsonWriter; import frame.config.Configer; import frame.data.DataContext; +import frame.file.FileIO; import frame.file.FileIOContainer; +import frame.file.FileIOErrorType; +import frame.file.FileIOException; +import frame.file.FileIOItem; import frame.file.UploadResult; +import frame.file.db.DataBaseTranslator; import frame.file.office.excel.DownloadResult; -import frame.file.office.excel.ExcelLoader; +import frame.file.office.excel.ExcelReader; +import frame.file.office.excel.ExcelReaders; import frame.file.office.excel.ExcelWriter; import frame.file.processor.Monitor; import frame.upload.FileItem; @@ -39,14 +45,14 @@ private static Engine instance; private static Object locker = new Object(); private Logger logger; - private ExcelLoader excelLoader; + private ExcelReader excelLoader; private static int MAX_CACHE_SIZE = 30 * 1024 * 1024; private static int MAX_FILE_SIZE = 100 * 1024 * 1024; private Engine() { logger = LoggerFactory.getLogger(this.getClass()); - excelLoader = new ExcelLoader(logger); + excelLoader = new ExcelReader(logger); } @@ -102,19 +108,28 @@ } } - public static UploadResult upload(String iocode, File file, HttpServletRequest request) throws Exception { + public static UploadResult upload(String ioCode, File file, HttpServletRequest request) throws Exception { UploadResult result = new UploadResult(request); result.writeBegin(); try { + //1. prepare getInstance(); FileIOContainer.load(); - - LoadManager manager = new LoadManager(result, iocode); - manager.setRequest(request); - instance.excelLoader.loadFiles(result, iocode, loadUploadFileList); -// instance.excelLoader.loadOneFile(result, iocode, file); + //2. + if (Util.isEmptyStr(ioCode)) { + throw new FileIOException(FileIOErrorType.FileIOCodeIsNull, "file io code is null"); + } + + FileIO fileIO = FileIOContainer.get(ioCode); + + if (fileIO == null) { + throw new FileIOException(FileIOErrorType.FileIONotExists, "fileio not exists: " + ioCode); + } + + //3. + instance.doUpload(fileIO); } catch (Exception e){ result.fail("error", e.getMessage()); @@ -126,6 +141,37 @@ return result; } + private void doUpload(FileIO fileIO) { + ExcelReaders excelLoaders = new ExcelReaders(request); + + //1. fire begin event + fileIO.execHandlers(result, "begin"); + + //2. file to tempt table + List<FileIOItem> importList = fileIO.getItemList(FileIOTypeCode.Import); + + for (FileIOItem fileIOItem : importList) { + fileIOItem.execHandlers(result, "begin"); + excelLoaders.loadOneItem(fileIOItem); + fileIOItem.execHandlers(result, "end"); + } + + //3. fire after tempt tables + fileIO.execHandlers(result, "after-temp"); + + //4. tempt table to standard table + List<FileIOItem> dbList = fileIO.getItemList(FileIOTypeCode.Db); + + for (FileIOItem fileIOItem : dbList) { + fileIOItem.execHandlers(result, "begin"); + DataBaseTranslator.translate(result, fileIOItem); + fileIOItem.execHandlers(result, "end"); + } + + //5. fire end event + fileIO.execHandlers(result, "end"); + } + private static List<FileItem> loadUploadFile(HttpServletRequest request) throws FileUploadException { DiskFileItemFactory diskFileFactory = new DiskFileItemFactory(); diff --git a/source/my/frame/src/frame/file/office/LoadManager.java b/source/my/frame/src/frame/file/office/LoadManager.java index a23077a..dbac984 100644 --- a/source/my/frame/src/frame/file/office/LoadManager.java +++ b/source/my/frame/src/frame/file/office/LoadManager.java @@ -8,17 +8,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import frame.file.FileIO; import frame.file.FileIOContainer; import frame.file.FileIOItem; import frame.file.UploadResult; import frame.file.db.DataBaseTranslator; -import frame.file.office.excel.ExcelHandler; -import frame.file.office.excel.ExcelLoaders; +import frame.file.office.excel.ExcelReaders; import frame.util.Util; + public class LoadManager { + private boolean isSuccess; private Logger logger; private String ioCode; @@ -71,7 +71,7 @@ throw new Exception("excelLoaders request is null"); } - ExcelLoaders excelLoaders = new ExcelLoaders(request); + ExcelReaders excelLoaders = new ExcelReaders(request); isSuccess = excelLoaders.load(result, fileIO); diff --git a/source/my/frame/src/frame/file/office/excel/ExcelLoader.java b/source/my/frame/src/frame/file/office/excel/ExcelLoader.java deleted file mode 100644 index b1c0e69..0000000 --- a/source/my/frame/src/frame/file/office/excel/ExcelLoader.java +++ /dev/null @@ -1,480 +0,0 @@ -package frame.file.office.excel; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.exceptions.OpenXML4JException; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.xssf.eventusermodel.XSSFReader; -import org.apache.poi.xssf.eventusermodel.XSSFReader.SheetIterator; -import org.apache.poi.xssf.model.SharedStringsTable; -import org.apache.poi.xssf.model.StylesTable; -import org.slf4j.Logger; -import org.xml.sax.ContentHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -import sun.awt.geom.AreaOp.AddOp; - -import frame.file.AppendMode; -import frame.file.DeleteMode; -import frame.file.FileIO; -import frame.file.FileIOContainer; -import frame.file.FileIOContext; -import frame.file.FileIOItem; -import frame.file.UploadResult; -import frame.file.office.FileRecord; -import frame.file.office.IOMappingItemRuntime; -import frame.persist.NamedSQL; -import frame.persist.SQLRunner; -import frame.upload.FileItem; -import frame.util.Util; - -public class ExcelLoader { - - private Logger logger; - private static int Count_Batch = 5000; - private UploadResult result; - private long count; - - private XMLReader parser; - private InputSource sheetSource; - private int index = 0; - private SheetHandler handler; - ArrayList<String> cloumnList; - public ExcelLoader(Logger logger) { - this.logger = logger; - } - - public boolean loadFiles(UploadResult result,String ioCode, List<FileItem> fiList) throws Exception { - //TODO 澶歴heet 鎴栬�呰 澶歠ile 缁勬垚涓�娆ask - for (FileItem fileItem : fiList) { - loadOneFile(result,ioCode, fileItem); - InputStream inputStream = fileItem.getInputStream(); - OPCPackage pkg = OPCPackage.open(inputStream); - XSSFReader xssfReader = new XSSFReader(pkg); - SharedStringsTable sharedStringsTable = xssfReader.getSharedStringsTable(); - StylesTable stylesTable = xssfReader.getStylesTable(); - sheet = xssfReader.getSheet("rId1"); - parser = fetchSheetParser(sharedStringsTable, stylesTable); - sheetSource = new InputSource(sheet); - } - return true; - } - - private XMLReader fetchSheetParser(SharedStringsTable sharedStringsTable, StylesTable stylesTable) throws SAXException { - XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); - handler = new SheetHandler(sharedStringsTable, stylesTable){ - - @Override - protected void outputRow(String[] datas, int[] rowTypes, int rowIndex, FileIOItem fileIOItem) { - if (rowIndex == 0) { - cloumnList = new ArrayList<String>(); - } - else if (fileIOItem.getFromRowNo() > (rowIndex - 1)) { - - for(int i = 0; i < datas.length; i++) { - String oneCloumn = datas[i]; - - if(cloumnList == null) { - cloumnList = new ArrayList<String>(); - } - - cloumnList.set(i, oneCloumn); - } - } - else { - //add one row - } - - } - }; - parser.setContentHandler(handler); - - return parser; - } - - public void loadOneFile(UploadResult result, String ioCode, FileItem fileItem) throws Exception { - this.result = result; - - //FileRecord fileRecord = new FileRecord(fileItem); - //1. repository - //2 - FileIO fileIO = FileIOContainer.get(ioCode); - - if (fileIO == null) { - logger.error("can not find fileIO: " + ioCode); - result.fail("error_IONotExist", "涓婅浇瀹氫箟娌℃湁閰嶇疆"); - return; - } - - //1. fire before process - fileIO.execHandlers(result, "begin"); - - //2. import file - doLoadOneFile(result, fileItem, fileIO); - - //3. move to standard table - processData(result, fileIO); - - //4. after save - fileIO.execHandlers(result, "end"); - - //5. backup - //fileRecord.moveToBackup(); - } - - public void testDataProcess(UploadResult result, String ioCode) { - FileIO fileIO = FileIOContainer.get(ioCode); - - if (fileIO == null) { - logger.error("can not find fileIO: " + ioCode); - result.fail("error_IONotExist", "涓婅浇瀹氫箟娌℃湁閰嶇疆"); - return; - } - - processData(result, fileIO); - } - - private void doLoadOneFile(UploadResult result, FileItem fileItem, FileIO fileIO) { - logger.info("姝e湪瀵煎叆鏂囦欢: " + fileItem.getName() + "..."); - - List<FileIOItem> ioItemList = fileIO.getItemList(FileIOItem.TypeCode_Import); - - //1. delete temp table data - for (FileIOItem ioItem : ioItemList) { - String toName = ioItem.getToName(); - - NamedSQL namedSql = NamedSQL.getInstance("emptyTable"); - namedSql.setParam("tablename", toName); - SQLRunner.execSQL(namedSql); - } - - //2. - - try { - - for (FileIOItem ioItem : ioItemList) { - readOneSheet(fileItem, ioItemList); - ioItem.execHandlers(result); - } - } - catch (Exception e) { - logger.error(e.getMessage()); - result.fail("error_parseData", "鏂囦欢瑙f瀽閿欒锛� " + e.getMessage()); - } - finally { - excelConn.Close(); - } - } - - private void readOneSheet(FileItem fileItem, List<FileIOItem> ioItemList) { - InputStream inputStream = fileItem.getInputStream(); - OPCPackage pkg = OPCPackage.open(inputStream); - XSSFReader xssfReader = new XSSFReader(pkg); - SharedStringsTable sharedStringsTable = xssfReader.getSharedStringsTable(); - StylesTable stylesTable = xssfReader.getStylesTable(); - parser = fetchSheetParser(sharedStringsTable, stylesTable); - XSSFReader.SheetIterator sheetsDataIterator = (SheetIterator) xssfReader.getSheetsData(); - - while (sheetsDataIterator.hasNext()) { - InputStream sheetData = sheetsDataIterator.next(); - String sheetName = sheetsDataIterator.getSheetName(); - - for (FileIOItem fileIOItem : ioItemList) { - String fromName = fileIOItem.getFromName(); - //TODO 澶歴heet 闂 1.澶歴heet 鍚屼竴寮犺〃 涓嶅悓瀛楁 涓�鏉℃暟鎹� 2.澶歴heet 涓嶅悓琛� 鐩稿悓涓存椂琛� 锛堜笉鍚屽瓧娈� 涓嶅悓鏁版嵁锛�3.澶歴heet涓嶅悓琛ㄤ笉鍚屼复鏃惰〃 1瀵�1 - if (fromName.equalsIgnoreCase(sheetName)) { - - InputSource inputSource = new InputSource(sheetData); - parser.parse(inputSource); - sheetData.close(); - } - } - - } - - - //2. create mapping runtime - List<String> excelColumns = getExcelFields(sheetname); - ioItemList.createMappingRuntime(excelColumns, new FileIOContext(result, ioItemList)); - - //3. create select sql - String excelDataString = createSelectSql(sheetname, ioItemList); - OleDbCommand command = new OleDbCommand(excelDataString, excelConn); - - //4. read data - OleDbDataReader dataReader = command.ExecuteReader(); - try { - SqlBulkCopy bulkCopy = null; - try { - bulkCopy = new SqlBulkCopy(SQLRunner.connStr); - - bulkCopy.DestinationTableName = ioItemList.getToName(); - - List<IOMappingItemRuntime> insertMappingRuntime = ioItemList.getInsertMappingRuntime(); - for (IOMappingItemRuntime itemRuntime : insertMappingRuntime) { - bulkCopy.ColumnMappings.Add(itemRuntime.getFromField(), itemRuntime.getToField()); - } - - bulkCopy.BatchSize = Count_Batch; - bulkCopy.NotifyAfter = Count_Batch; - bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(onBatchCopyedEvent); - - bulkCopy.WriteToServer(dataReader); - } - finally { - if (bulkCopy != null) { - bulkCopy.Close(); - } - } - } - finally { - dataReader.Close(); - } - } - - private void processData(UploadResult result, FileIO fileIO) { - try { - List<FileIOItem> itemList = fileIO.getItemList(FileIOItem.TypeCode_DB); - - //0. init - for (FileIOItem item : itemList) { - FileIOContext context = (FileIOContext)(item.createContext(result)); - item.createMappingRuntime(null, context); - } - - //1. process temple data - for (FileIOItem ioItem : itemList) { - ioItem.execHandlers(result, "beforemove"); - } - - if (!result.isSuccess()) { - return; - } - - //2. move data to standard table - for (FileIOItem ioItem : itemList) { - if (ioItem.isStandardMove()) { - transferData(result, ioItem); - continue; - } - else { - ioItem.execHandlers(result, "move"); - } - } - - if (!result.isSuccess()) { - return; - } - - //3. process standard table - for (FileIOItem ioItem : itemList) { - ioItem.execHandlers(result, "aftermove"); - } - - if (!result.isSuccess()) { - return; - } - } - catch (Exception e) { - logger.error(result.workingSQL.getSQLString()); - - e.printStackTrace(); - throw e; - } - } - - private void transferData(UploadResult result, FileIOItem ioItem) throws Exception { - FileIOContext context = (FileIOContext) (ioItem.getContext()); - - AppendMode appendMode = ioItem.getAppendMode(); - DeleteMode deleteMode = ioItem.getDeleteMode(); - int cnt = 0; - - if (AppendMode.Append == appendMode) { - cnt = execute("transferAll", context); - result.addMessage("鎻掑叆鏁版嵁锛�" + cnt); - } - else if (AppendMode.ClearAndAppend == appendMode) { - //1. clear data - if (ioItem.existsFilterFieldValues()) { - cnt = execute("deleteByFilter", context); - } - else { - cnt = execute("deleteAll", context); - } - result.addMessage("鍒犻櫎鏁版嵁锛�" + cnt); - - //2. transfer data - cnt = execute("transferAll", context); - result.addMessage("鎻掑叆鏁版嵁锛�" + cnt); - } - else if (AppendMode.UpdateChanged == appendMode) { - //1. delete not exists data - if (DeleteMode.HardDelete == deleteMode) { - cnt = execute("hardDeleteNotExists", context); - result.addMessage("鍒犻櫎鏁版嵁锛�" + cnt); - } - else if (DeleteMode.SoftDelete == deleteMode) { - cnt = execute("softDeleteNotExists", context); - result.addMessage("杞垹闄ゆ暟鎹細" + cnt); - } - - //2. update exists data - cnt = execute("updateExists", context); - result.addMessage("鏇存柊鏁版嵁锛�" + cnt); - - //3. insert append data - cnt = execute("insertAppend", context); - result.addMessage("鎻掑叆鏁版嵁锛�" + cnt); - } - else if (AppendMode.InsertChanged == appendMode) { - //1. update exists data - cnt = execute("updateExists", context); - result.addMessage("鏇存柊鏁版嵁锛�" + cnt); - - //2. insert append data - cnt = execute("insertAppend", context); - result.addMessage("鎻掑叆鏁版嵁锛�" + cnt); - } - } - - private int execute(String sqlName, FileIOContext context) throws Exception { - NamedSQL namedSQL = NamedSQL.getInstance(sqlName); - context.setParametersTo(namedSQL); - return SQLRunner.execSQL(namedSQL); - } - - private void onBatchCopyedEvent(object sender, SqlRowsCopiedEventArgs e) { - count = count + e.RowsCopied; - logger.info("宸插鍏�" + count + "鏉�..."); - } - - private String getSheetName(OleDbConnection excelConn, FileIOItem ioItem) { - DataTable sheetNames = excelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new String[] { null, null, null, "Table" }); - - String designname = FileIOItem.extractSheetName(ioItem.getFromName()).toLowerCase(); - List<String> sheetNameList = new ArrayList<String>(); - - //1. - for (int i = 0; i < sheetNames.Rows.Count; i++) { - String sheetname = sheetNames.Rows[i][2].ToString(); - - String lower = sheetname.trim().toLowerCase(); - if (designname.equals(lower)) { - return sheetname; - } - - sheetNameList.add(lower); - } - - //2. - if (designname.indexOf("$") >= 0) { - designname = designname.replace("$", "sheet"); - String lower = designname.trim().toLowerCase(); - - if (!"$".equals(lower.substring(lower.length() - 1))) { - lower = lower + "$"; - } - - for (int i = sheetNameList.size() - 1; i >= 0; i--) { - String sheetname = sheetNameList.get(i); - - - - if (sheetname.equals(lower)) { - return sheetname; - } - } - } - - //3. - for (int i = sheetNameList.size() - 1; i >= 0; i--) { - String sheetname = sheetNameList.get(i); - - if ("$".equals(sheetname.substring(sheetname.length() - 1))) { - return sheetname; - } - } - - return null; - } - - private List<String> getExcelFields(String sheetname) { - List<String> result = new ArrayList<String>(); - - DataTable columns = excelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new Object[] { null, null, sheetname, null }); - - for (int i = 0; i < columns.Rows.Count; i++) { - String columnname = columns.Rows[i].ItemArray[3].ToString(); - result.add(columnname); - } - - return result; - } - - private String createSelectSql(String sheetname, FileIOItem ioItem) { - StringBuilder result = new StringBuilder(); - - List<IOMappingItemRuntime> itemRuntimes = ioItem.getInsertMappingRuntime(); - - result.append("Select "); - - Boolean empty = true; - - for (IOMappingItemRuntime itemRuntime : itemRuntimes) { - if (!empty) { - result.append(", "); - } - - result.append("["); - result.append(itemRuntime.getFromField()); - result.append("]"); - - empty = false; - } - - sheetname = Util.deleteQuoted(sheetname); - result.append(" FROM [").append(sheetname).append("]"); - - return result.toString(); - } - - public void getExcelMeta() { - String excelConnString = String.Format(Configer.readExcelConnString, "D:/宸ヤ綔/root/local/NPT sales YTD 2014-2_A.xlsx"); - logger.write("姝e湪瀵煎叆鏂囦欢..."); - - OleDbConnection excelConn = new OleDbConnection(excelConnString); - try { - excelConn.Open(); - logger.write("姝e湪鎵撳紑鏂囦欢锛岃鍙栨暟鎹�..."); - DataTable datatable = excelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new String[] { null, null, null, "Table" }); - - int cnt = datatable.Rows.Count; - int fieldCnt = datatable.Columns.Count; - - for (int i = 0; i < cnt; i++) { - DataRow row = datatable.Rows[i]; - - String value = ""; - for (int j = 0; j < fieldCnt; j++) { - value = value + ", " + row[j].ToString(); - } - - logger.write(value); - } - } - finally { - excelConn.Close(); - } - } - -} diff --git a/source/my/frame/src/frame/file/office/excel/ExcelLoaders.java b/source/my/frame/src/frame/file/office/excel/ExcelLoaders.java deleted file mode 100644 index 4946c3c..0000000 --- a/source/my/frame/src/frame/file/office/excel/ExcelLoaders.java +++ /dev/null @@ -1,277 +0,0 @@ -package frame.file.office.excel; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.transaction.Transaction; - -import org.apache.commons.collections4.map.HashedMap; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.exceptions.OpenXML4JException; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.xssf.eventusermodel.XSSFReader; -import org.apache.poi.xssf.eventusermodel.XSSFReader.SheetIterator; -import org.apache.poi.xssf.model.SharedStringsTable; -import org.apache.poi.xssf.model.StylesTable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; - -import com.sun.mail.handlers.image_gif; -import com.sun.org.apache.bcel.internal.generic.NEW; - -import frame.config.Configer; -import frame.data.Entity; -import frame.data.meta.EntityMeta; -import frame.file.AppendMode; -import frame.file.DeleteMode; -import frame.file.FileIO; -import frame.file.FileIOContext; -import frame.file.FileIOItem; -import frame.file.LoadError; -import frame.file.UploadResult; -import frame.file.office.FileIOTypeCode; -import frame.file.office.IOMappingItemRuntime; -import frame.persist.NamedSQL; -import frame.persist.SQLRunner; -import frame.upload.FileItem; -import frame.upload.FileUploadException; -import frame.upload.disk.DiskFileItemFactory; -import frame.upload.servlet.ServletFileUpload; - -public class ExcelLoaders { - - private Logger logger; - private UploadResult result; - private HttpServletRequest request; - private List<Entity> dataList; - private static int MAX_CACHE_SIZE = 30 * 1024 * 1024; - private static int MAX_FILE_SIZE = 100 * 1024 * 1024; - private static int DEFAULT_UPLOAD_SIZE = 10000; - - public ExcelLoaders(HttpServletRequest request) { - this.logger = LoggerFactory.getLogger(this.getClass()); - this.request = request; - dataList = new ArrayList<Entity>(); - } - - public boolean load(UploadResult result, FileIO fileIO) throws Exception { - this.result = result; - boolean isSuccess = false; - List<FileIOItem> importList = fileIO.getItemList(FileIOTypeCode.Import); - - for (FileIOItem fileIOItem : importList) { - fileIO.execHandlers(result, "XXbefore"); - isSuccess = oneload(fileIOItem); - } - - return isSuccess; - } - - private boolean oneload(FileIOItem fileIOItem) throws Exception { - //1. delete temp table data - String toName = fileIOItem.getToName(); - NamedSQL namedSql = NamedSQL.getInstance("emptyTable"); - namedSql.setParam("tablename", toName); - SQLRunner.execSQL(namedSql); - - List<FileItem> loadUploadFile = loadUploadFile(request); - //2. import file - boolean isEndFound = false; - for (int i = 0; i < loadUploadFile.size(); i++) { - FileItem fileItem = loadUploadFile.get(i); - LoadError loadOneError = doLoadOneFile(result, fileItem, fileIOItem); - - if (loadOneError.equals(LoadError.SheetNotFound) && i < loadUploadFile.size() - 1) { - isEndFound = false; - } - - if ((i == loadUploadFile.size() - 1) && !isEndFound) { - throw SheetNotFoundException(loadOneError.getMessage()); - } - - if (loadOneError.equals(LoadError.SQLRunError)) { - throw SQLrunnerException(loadOneError.getMessage()); - } - - } - - return false; - } - - private String transactionSheetName(String fromName) { - String sheetName = fromName; - int leftIndex = fromName.indexOf("["); - String sheetString = fromName.substring(0, leftIndex); - - if (sheetString.equalsIgnoreCase("*")) { - sheetName = "rId"; - } - - int rightIndex = fromName.indexOf("]"); - String noString = fromName.substring(leftIndex + 1, rightIndex); - - try { - Integer no = Integer.valueOf(noString); - sheetName += no; - } catch (Exception e) { - e.printStackTrace(); - throw new FileIOException("fileio 鏁版嵁閿欒"); - } - - return sheetName; - } - - private LoadError doLoadOneFile(UploadResult result, FileItem file, FileIOItem fileIOItem) { - logger.info("姝e湪瀵煎叆鏂囦欢: " + file.getName() + "..."); - LoadError loadError = null; - //1. delete temp table data - String toName = fileIOItem.getToName(); - NamedSQL namedSql = null; - try { - namedSql = NamedSQL.getInstance("emptyTable"); - namedSql.setParam("tablename", toName); - SQLRunner.execSQL(namedSql); - } catch (Exception e) { - e.printStackTrace(); - loadError = LoadError.SQLRunError; - try { - loadError.setMessage("SQL:" + namedSql.getSQLString()); - } catch (Exception e1) { - loadError.setMessage("SQL:" + namedSql.getName() + "-- not found"); - e1.printStackTrace(); - } - return loadError; - } - - //2. load file - InputStream fileInputStream = null; - InputStream sheetInputStream = null; - try { - fileInputStream = file.getInputStream(); - OPCPackage pkg = OPCPackage.open(fileInputStream); - - XSSFReader xssfReader = new XSSFReader(pkg); - SharedStringsTable sharedStringsTable = xssfReader.getSharedStringsTable(); - StylesTable stylesTable = xssfReader.getStylesTable(); - - String fromName = fileIOItem.getFromName(); - String sheetName = FileIOItem.extractFileName(fromName) + FileIOItem.extractSheetName(fromName); - sheetInputStream = xssfReader.getSheet(sheetName); - - if (sheetInputStream.available() == 0) { - //TODO 娌℃壘鍒版湰fileiotime瀵瑰簲鐨剆heet 涓や釜鏂瑰悜 澶歠ile涓� 鍚庨潰file 鎵惧埌浜� 杩樻槸璇撮渶瑕佸涓猣ile閮藉瓨鍦� - loadError = LoadError.SheetNotFound; - loadError.setMessage("sheet :" + sheetName + " not match"); - return loadError; - } - - XMLReader parser = fetchSheetParser(sharedStringsTable, stylesTable); - InputSource sheetSource = new InputSource(sheetInputStream); - parser.parse(sheetSource); - - fileIOItem.execHandlers(result); - } - catch (Exception e) { - logger.error(e.getMessage()); - result.fail("error_parseData", "鏂囦欢瑙f瀽閿欒锛� " + e.getMessage()); - } - finally { - if (fileInputStream != null) { - try { - fileInputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (sheetInputStream != null) { - try { - sheetInputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return LoadError.Non; - } - - private XMLReader fetchSheetParser(SharedStringsTable sharedStringsTable, StylesTable stylesTable) throws SAXException { - XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); - SheetHandler handler = new SheetHandler(sharedStringsTable, stylesTable){ - - @Override - protected void outputRow(String[] datas, int[] rowTypes, int rowIndex, FileIOItem fileIOItem) { - Map<String, Integer> cloumnMap = null; - if (rowIndex == 0) { - cloumnMap = new HashedMap<String, Integer>(); - } - else if (fileIOItem.getFromRowNo() > (rowIndex - 1)) { - for(int i = 0; i < datas.length; i++) { - String oneCloumn = datas[i]; - - if(cloumnMap == null) { - cloumnMap = new HashMap<String, Integer>(); - } - - cloumnMap.put(oneCloumn, i); - } - } - else { - //add one row - if (fileIOItem.getFromRowNo() + DEFAULT_UPLOAD_SIZE == rowIndex) { - commit2TeslmpDb(dataList); - } - List<IOMappingItemRuntime> insertMappingRuntime = fileIOItem.getInsertMappingRuntime(); - EntityMeta toMeta = fileIOItem.getToMeta(); - Entity entity = new Entity(toMeta); - - for (IOMappingItemRuntime ioMappingItemRuntime : insertMappingRuntime) { - String fromField = ioMappingItemRuntime.getFromField(); - String toField = ioMappingItemRuntime.getToField(); - if (cloumnMap == null) { - throw new NoCloumnException(""); - } - - if(!cloumnMap.containsKey(fromField)) { - throw new NoMatchFieldException(fromField); - } - - Integer valueIdx = cloumnMap.get(fromField); - String fieldValue = datas[valueIdx]; - entity.set(toField, fieldValue); - } - dataList.add(entity); - - } - - } - }; - parser.setContentHandler(handler); - - return parser; - } - - - @SuppressWarnings("unchecked") - private static List<FileItem> loadUploadFile(HttpServletRequest request) throws FileUploadException { - DiskFileItemFactory diskFileFactory = new DiskFileItemFactory(); - diskFileFactory.setSizeThreshold(MAX_CACHE_SIZE); - diskFileFactory.setRepository(new File(Configer.getParam("repository"))); - - ServletFileUpload fileUpload = new ServletFileUpload(diskFileFactory); - fileUpload.setSizeMax(MAX_FILE_SIZE); - return fileUpload.parseRequest(request); - } - -} -- Gitblit v1.8.0