Selaa lähdekoodia

前台上传文件后端服务能够正常解析得到相应数据,数据保存未处理

wuxw 6 vuotta sitten
vanhempi
commit
0da48a8bf8

+ 0 - 13
WebService/pom.xml

@@ -60,19 +60,6 @@
         </dependency>
 
 
-        <dependency>
-            <groupId>org.apache.poi</groupId>
-            <artifactId>poi</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.poi</groupId>
-            <artifactId>poi-ooxml</artifactId>
-        </dependency>
-        <!-- 处理excel和上面功能是一样的-->
-        <dependency>
-            <groupId>net.sourceforge.jexcelapi</groupId>
-            <artifactId>jxl</artifactId>
-        </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

+ 16 - 8
WebService/src/main/java/com/java110/web/components/assetImport/AssetImportComponent.java

@@ -1,14 +1,21 @@
 package com.java110.web.components.assetImport;
 
+import com.java110.common.util.ImportExcelUtils;
 import com.java110.core.context.IPageData;
 import com.java110.web.controller.CallComponentController;
 import com.java110.web.smo.app.IAddAppSMO;
+import com.java110.web.smo.assetImport.IAssetImportSMO;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
 
 /**
  * 添加应用组件
@@ -18,25 +25,26 @@ public class AssetImportComponent {
 
     private final static Logger logger = LoggerFactory.getLogger(CallComponentController.class);
 
+
     @Autowired
-    private IAddAppSMO addAppSMOImpl;
+    private IAssetImportSMO assetImportSMOImpl;
 
     /**
      * 添加应用数据
+     *
      * @param pd 页面数据封装
      * @return ResponseEntity 对象
      */
-    public ResponseEntity<String> importData(IPageData pd){
+    public ResponseEntity<String> importData(IPageData pd, MultipartFile uploadFile) throws Exception{
 
-        logger.debug("请求参数为:%s", pd.getReqData());
-        return new ResponseEntity<String>("成功", HttpStatus.OK);
+        return assetImportSMOImpl.importExcelData(pd,uploadFile);
     }
 
-    public IAddAppSMO getAddAppSMOImpl() {
-        return addAppSMOImpl;
+    public IAssetImportSMO getAssetImportSMOImpl() {
+        return assetImportSMOImpl;
     }
 
-    public void setAddAppSMOImpl(IAddAppSMO addAppSMOImpl) {
-        this.addAppSMOImpl = addAppSMOImpl;
+    public void setAssetImportSMOImpl(IAssetImportSMO assetImportSMOImpl) {
+        this.assetImportSMOImpl = assetImportSMOImpl;
     }
 }

+ 41 - 3
WebService/src/main/java/com/java110/web/controller/CallComponentController.java

@@ -1,11 +1,13 @@
 package com.java110.web.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.java110.common.constant.CommonConstant;
 import com.java110.common.exception.SMOException;
 import com.java110.common.factory.ApplicationContextFactory;
 import com.java110.common.util.Assert;
 import com.java110.core.base.controller.BaseController;
 import com.java110.core.context.IPageData;
+import com.java110.core.context.PageData;
 import com.java110.web.smo.impl.LoginServiceSMOImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -19,6 +21,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.Map;
 
 
 /**
@@ -85,6 +88,7 @@ public class CallComponentController extends BaseController {
 
     /**
      * 调用组件 文件上传
+     * /callComponent/upload/assetImport/importData
      *
      * @return
      */
@@ -97,6 +101,8 @@ public class CallComponentController extends BaseController {
             //@RequestBody String info,
             HttpServletRequest request) {
         ResponseEntity<String> responseEntity = null;
+        Map formParam = null;
+        IPageData pd = null;
         try {
             Assert.hasLength(componentCode, "参数错误,未传入组件编码");
             Assert.hasLength(componentMethod, "参数错误,未传入调用组件方法");
@@ -108,18 +114,19 @@ public class CallComponentController extends BaseController {
             Method cMethod = componentInstance.getClass().getDeclaredMethod(componentMethod, IPageData.class, MultipartFile.class);
 
             Assert.notNull(cMethod, "未找到组件对应处理类的方法,请确认 " + componentCode + "方法:" + componentMethod);
-
-            IPageData pd = (IPageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA);
+            pd = freshPageDate(request);
 
             logger.debug("组件编码{},组件方法{},pd 为{}", componentCode, componentMethod, pd.toString());
 
-            responseEntity = (ResponseEntity<String>) cMethod.invoke(componentInstance, pd);
+            responseEntity = (ResponseEntity<String>) cMethod.invoke(componentInstance, pd, uploadFile);
 
         } catch (SMOException e) {
+            logger.error("组件运行异常",e);
             /*MultiValueMap<String, String> headers = new HttpHeaders();
             headers.add("code", e.getResult().getCode());*/
             responseEntity = new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
         } catch (Exception e) {
+            logger.error("组件运行异常",e);
             String msg = "";
             if (e instanceof InvocationTargetException) {
                 Throwable targetEx = ((InvocationTargetException) e).getTargetException();
@@ -136,5 +143,36 @@ public class CallComponentController extends BaseController {
         }
     }
 
+    /**
+     * 刷新 pd 对象
+     *
+     * @param request HttpServletRequest 对象
+     * @return pd 对象
+     */
+    private IPageData freshPageDate(HttpServletRequest request) {
+        Map<String, String[]> params = request.getParameterMap();
+        IPageData pd = (IPageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA);
+        String reqData = "";
+        if (params != null && !params.isEmpty()) {
+            JSONObject paramObj = new JSONObject();
+            for (String key : params.keySet()) {
+                if (params.get(key).length > 0) {
+                    String value = "";
+                    for (int paramIndex = 0; paramIndex < params.get(key).length; paramIndex++) {
+                        value = params.get(key)[paramIndex] + ",";
+                    }
+                    value = value.endsWith(",") ? value.substring(0, value.length() - 1) : value;
+                    paramObj.put(key, value);
+                }
+                continue;
+            }
+            reqData = paramObj.toJSONString();
+        }
+
+        IPageData newPd = PageData.newInstance().builder(pd.getUserId(), pd.getToken(),
+                reqData, pd.getComponentCode(), pd.getComponentMethod(), "", pd.getSessionId());
+        return newPd;
+    }
+
 
 }

+ 24 - 0
WebService/src/main/java/com/java110/web/smo/assetImport/IAssetImportSMO.java

@@ -0,0 +1,24 @@
+package com.java110.web.smo.assetImport;
+
+import com.java110.core.context.IPageData;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @ClassName IAssetImportSMO
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/9/23 23:13
+ * @Version 1.0
+ * add by wuxw 2019/9/23
+ **/
+public interface IAssetImportSMO {
+
+    /**
+     * 导入excel数据
+     * @param pd 前台数据封装
+     * @param uploadFile excel 文件
+     * @return ResponseEntity
+     */
+    public ResponseEntity<String> importExcelData(IPageData pd,  MultipartFile uploadFile) throws Exception;
+}

+ 47 - 0
WebService/src/main/java/com/java110/web/smo/assetImport/impl/AssetImportSMOImpl.java

@@ -0,0 +1,47 @@
+package com.java110.web.smo.assetImport.impl;
+
+import com.java110.common.util.ImportExcelUtils;
+import com.java110.core.context.IPageData;
+import com.java110.web.core.BaseComponentSMO;
+import com.java110.web.smo.assetImport.IAssetImportSMO;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+import java.util.List;
+
+/**
+ * @ClassName AssetImportSmoImpl
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/9/23 23:14
+ * @Version 1.0
+ * add by wuxw 2019/9/23
+ **/
+@Service("assetImportSMOImpl")
+public class AssetImportSMOImpl extends BaseComponentSMO implements IAssetImportSMO {
+    private final static Logger logger = LoggerFactory.getLogger(AssetImportSMOImpl.class);
+
+    @Override
+    public ResponseEntity<String> importExcelData(IPageData pd, MultipartFile uploadFile) throws Exception{
+        InputStream is = uploadFile.getInputStream();
+
+        Workbook workbook = null;  //工作簿
+        Sheet sheet = null;         //工作表
+        String[] headers = null;   //表头信息
+
+        workbook = ImportExcelUtils.createWorkbook(uploadFile);
+
+        sheet = ImportExcelUtils.getSheet(workbook, "楼栋单元");
+        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
+
+        logger.debug("请求参数为:%s", pd.getReqData());
+        return new ResponseEntity<String>("成功", HttpStatus.OK);
+    }
+}

+ 1 - 1
WebService/src/main/resources/components/systemPackage/assetImport/assetImport.js

@@ -63,7 +63,7 @@
                     return ;
                 }
                 var param = new FormData();
-                param.append("excelTemplate", vc.component.assetImportInfo.excelTemplate);
+                param.append("uploadFile", vc.component.assetImportInfo.excelTemplate);
                 param.append('communityId',vc.component.assetImportInfo.communityId);
 
 

+ 16 - 0
java110-common/pom.xml

@@ -132,5 +132,21 @@
             <groupId>commons-net</groupId>
             <artifactId>commons-net</artifactId>
         </dependency>
+
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml-schemas</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 42 - 0
java110-common/src/main/java/com/java110/common/util/Assert.java

@@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -265,4 +266,45 @@ public class Assert extends org.springframework.util.Assert {
 
     }
 
+    @SuppressWarnings("rawtypes")
+    public static boolean objIsEmpty(Object o) {
+        if (o == null) {
+            return true;
+        }
+        if (o instanceof String) {
+            if (o.toString().trim().equals("")) {
+                return true;
+            }
+            if (o.equals("null") || o.equals("NULL")) {
+                return true;
+            }
+        } else if (o instanceof List) {
+            if (((List) o).size() == 0) {
+                return true;
+            }
+        } else if (o instanceof Map) {
+            if (((Map) o).size() == 0) {
+                return true;
+            }
+        } else if (o instanceof Set) {
+            if (((Set) o).size() == 0) {
+                return true;
+            }
+        } else if (o instanceof Object[]) {
+            if (((Object[]) o).length == 0) {
+                return true;
+            }
+        } else if (o instanceof int[]) {
+            if (((int[]) o).length == 0) {
+                return true;
+            }
+        } else if (o instanceof long[]) {
+            if (((long[]) o).length == 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
 }

+ 234 - 0
java110-common/src/main/java/com/java110/common/util/ImportExcelUtils.java

@@ -0,0 +1,234 @@
+package com.java110.common.util;
+
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * Excel导入工具类
+ *
+ * @author Evan.Zhang
+ */
+public class ImportExcelUtils {
+
+    /**
+     * 创建WorkBook对象
+     *
+     * @param filePath
+     * @return
+     * @throws IOException
+     */
+    public static final Workbook createWorkbook(String filePath) throws IOException {
+
+        if (filePath.trim().toLowerCase().endsWith("xls")) {
+            return new XSSFWorkbook(new FileInputStream(filePath));
+        } else if (filePath.trim().toLowerCase().endsWith("xlsx")) {
+            return new XSSFWorkbook(new FileInputStream(filePath));
+        } else {
+            throw new IllegalArgumentException("不是有效的excel文件格式");
+        }
+    }
+
+    /**
+     * 创建WorkBook对象
+     *
+     * @param uploadFile
+     * @return
+     * @throws IOException
+     */
+    public static final Workbook createWorkbook(MultipartFile uploadFile) throws IOException {
+        return new XSSFWorkbook(uploadFile.getInputStream());
+    }
+
+    /**
+     * 获取Sheet页面(按名称)
+     *
+     * @param wb
+     * @param sheetName
+     * @return
+     */
+    public static final Sheet getSheet(Workbook wb, String sheetName) {
+        return wb.getSheet(sheetName);
+    }
+
+    /**
+     * 获取Sheet页面(按页标)
+     *
+     * @param wb
+     * @param index
+     * @return
+     */
+    public static final Sheet getSheet(Workbook wb, int index) {
+        return wb.getSheetAt(index);
+    }
+
+    /**
+     * 获取Sheet页内容
+     *
+     * @param sheet
+     * @return
+     */
+    public static final List<Object[]> listFromSheet(Sheet sheet) {
+
+        List<Object[]> list = new ArrayList<Object[]>();
+        for (int r = sheet.getFirstRowNum(); r <= sheet.getLastRowNum(); r++) {
+            Row row = sheet.getRow(r);
+            if (row == null || row.getPhysicalNumberOfCells() == 0) continue;
+            Object[] cells = new Object[row.getLastCellNum()];
+            for (int c = row.getFirstCellNum(); c <= row.getLastCellNum(); c++) {
+                Cell cell = row.getCell(c);
+                if (cell == null) continue;
+                //判断是否为日期类型
+                cells[c] = getValueFromCell(cell);
+            }
+            list.add(cells);
+        }
+        return list;
+    }
+
+
+    /**
+     * 获取单元格内信息
+     *
+     * @param cell
+     * @return
+     */
+    public static final Object getValueFromCell(Cell cell) {
+        if (cell == null) {
+            //System.out.println("Cell is null !!!");
+            return null;
+        }
+        Object result = null;
+        if (cell instanceof HSSFCell) {
+            if (cell != null) {
+                // 单元格类型:Numeric:0,String:1,Formula:2,Blank:3,Boolean:4,Error:5
+                int cellType = ((HSSFCell) cell).getCellType();
+                switch (cellType) {
+                    case HSSFCell.CELL_TYPE_STRING:
+                        result = ((HSSFCell) cell).getStringCellValue();
+                        break;
+                    case HSSFCell.CELL_TYPE_NUMERIC:
+                        DecimalFormat df = new DecimalFormat("###.####");
+                        result = df.format(((HSSFCell) cell).getNumericCellValue());
+                        break;
+                    case HSSFCell.CELL_TYPE_FORMULA:
+                        result = ((HSSFCell) cell).getNumericCellValue();
+                        break;
+                    case HSSFCell.CELL_TYPE_BOOLEAN:
+                        result = ((HSSFCell) cell).getBooleanCellValue();
+                        break;
+                    case HSSFCell.CELL_TYPE_BLANK:
+                        result = null;
+                        break;
+                    case HSSFCell.CELL_TYPE_ERROR:
+                        result = null;
+                        break;
+                    default:
+                        System.out.println("枚举了所有类型");
+                        break;
+                }
+            }
+        } else if (cell instanceof XSSFCell) {
+            if (cell != null) {
+                // 单元格类型:Numeric:0,String:1,Formula:2,Blank:3,Boolean:4,Error:5
+                int cellType = ((XSSFCell) cell).getCellType();
+                switch (cellType) {
+                    case XSSFCell.CELL_TYPE_STRING:
+                        result = ((XSSFCell) cell).getRichStringCellValue().getString();
+                        break;
+                    case XSSFCell.CELL_TYPE_NUMERIC:
+                        DecimalFormat df = new DecimalFormat("###.####");
+                        result = df.format(((XSSFCell) cell).getNumericCellValue());
+                        break;
+                    case XSSFCell.CELL_TYPE_FORMULA:
+                        result = ((XSSFCell) cell).getNumericCellValue();
+                        break;
+                    case XSSFCell.CELL_TYPE_BOOLEAN:
+                        result = ((XSSFCell) cell).getBooleanCellValue();
+                        break;
+                    case XSSFCell.CELL_TYPE_BLANK:
+                        result = null;
+                        break;
+                    case XSSFCell.CELL_TYPE_ERROR:
+                        result = null;
+                        break;
+                    default:
+                        //System.out.println("枚举了所有类型");
+                        break;
+                }
+            }
+        }
+        return result;
+    }
+
+
+    /**
+     * 根据Sheet页导入Excel信息
+     *
+     * @param filePath   文件路径
+     * @param sheetIndex Sheet页下标
+     * @param startRow   开始列 :默认第一列
+     * @param startLine  开始行 :默认第一行
+     * @throws Exception
+     */
+    public static final List<Object[]> importExcelBySheetIndex(String filePath, int sheetIndex
+            , int startRow, int startLine) throws Exception {
+
+        List<Object[]> resultList = null;
+
+        //创建WorkBook对象
+        Workbook wb = createWorkbook(filePath);
+
+        // 获取Sheet
+        Sheet sheet = ImportExcelUtils.getSheet(wb, sheetIndex);
+
+        // 判断Sheet是否为空
+        if (sheet != null) {
+
+            // 遍历Sheet
+            List<Object[]> list = ImportExcelUtils.listFromSheet(sheet);
+            if (list != null && list.size() > 0) {
+                resultList = new ArrayList<Object[]>();
+                if (startLine <= list.size()) {
+                    for (int i = startLine; i < list.size(); i++) {
+                        int nullCount = 0;
+                        Object[] rows = list.get(i);
+                        if (rows != null && rows.length > 0) {
+                            List<Object> resultObjects = new ArrayList<Object>();
+                            for (int n = startRow; n < rows.length; n++) {
+                                if (Assert.objIsEmpty(rows[n])) {
+                                    nullCount++;
+                                }
+                                resultObjects.add(rows[n]);
+                            }
+
+                            //判断空的单元格个数
+                            if (nullCount >= rows.length) {
+                                break;
+                            } else {
+                                resultList.add(resultObjects.toArray());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return resultList;
+    }
+}

+ 17 - 17
pom.xml

@@ -96,7 +96,6 @@
             </dependency>
 
 
-
             <dependency>
                 <groupId>com.alibaba</groupId>
                 <artifactId>fastjson</artifactId>
@@ -374,11 +373,11 @@
             </dependency>
 
 
-           <!-- <dependency>
-                <groupId>org.quartz-scheduler</groupId>
-                <artifactId>quartz</artifactId>
-                <version>2.3.0</version>
-            </dependency>-->
+            <!-- <dependency>
+                 <groupId>org.quartz-scheduler</groupId>
+                 <artifactId>quartz</artifactId>
+                 <version>2.3.0</version>
+             </dependency>-->
             <dependency>
                 <groupId>org.quartz-scheduler</groupId>
                 <artifactId>quartz</artifactId>
@@ -453,19 +452,20 @@
             <!-- 引入poi,解析workbook视图 -->
             <dependency>
                 <groupId>org.apache.poi</groupId>
-                <artifactId>poi</artifactId>
-                <version>3.16</version>
+                <artifactId>poi-ooxml</artifactId>
+                <version>3.17</version>
             </dependency>
+
             <dependency>
                 <groupId>org.apache.poi</groupId>
-                <artifactId>poi-ooxml</artifactId>
-                <version>3.14</version>
+                <artifactId>poi-ooxml-schemas</artifactId>
+                <version>3.17</version>
             </dependency>
-            <!-- 处理excel和上面功能是一样的-->
+
             <dependency>
-                <groupId>net.sourceforge.jexcelapi</groupId>
-                <artifactId>jxl</artifactId>
-                <version>2.6.10</version>
+                <groupId>org.apache.poi</groupId>
+                <artifactId>poi</artifactId>
+                <version>3.17</version>
             </dependency>
 
         </dependencies>
@@ -505,9 +505,9 @@
     <build>
         <plugins>
             <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>2.10.4</version>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>2.10.4</version>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>