Browse Source

excel前半部分解析

guq 7 years ago
parent
commit
8e152a77d2
23 changed files with 1255 additions and 23 deletions
  1. 4 0
      applications/school/school-server/pom.xml
  2. 1 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java
  3. 1 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java
  4. 5 2
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/SchoolServiceImpl.java
  5. 1 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java
  6. 1 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java
  7. 79 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/controller/ExcelController.java
  8. 8 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/controller/MessageLogController.java
  9. 14 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/ExcelService.java
  10. 8 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/MessageLogService.java
  11. 517 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/impl/ExcelServiceImpl.java
  12. 11 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/impl/MessageLogServiceImpl.java
  13. 1 1
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java
  14. 20 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/DataImportMapper.java
  15. 9 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/DataTempletMapper.java
  16. 100 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/DataImport.java
  17. 109 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/DataImportDetail.java
  18. 78 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/DataTemplet.java
  19. 72 0
      applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TempletSet.java
  20. 151 0
      applications/school/school-server/src/main/resources/mapper/DataImportMapper.xml
  21. 17 0
      applications/school/school-server/src/main/resources/mapper/DataTempletMapper.xml
  22. 27 0
      frontend/pc-web/app/view/basic/staff/StaffList.js
  23. 21 20
      frontend/pc-web/app/view/core/base/ImportWindow.js

+ 4 - 0
applications/school/school-server/pom.xml

@@ -73,6 +73,10 @@
             <groupId>com.usoftchina.smartschool</groupId>
             <artifactId>school-dto</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/ClassServiceImpl.java

@@ -33,6 +33,7 @@ public class ClassServiceImpl implements ClassService{
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
         Long school_id = BaseContextHolder.getSchoolId();
+        school_id = 1l;
         ClassForm cf = new ClassForm();
         SysClazz clazz = sysClazzMapper.selectByPrimaryKey(id);
         List<SysStudent> students = sysStudentMapper.selectByConditon("clazz_id=" + id, school_id);

+ 1 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/GradeServiceImpl.java

@@ -35,6 +35,7 @@ public class GradeServiceImpl implements GradeService{
         if (null == id || "0".equals(id)) {
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
+        id = 1l;
         SysSchool school = sysSchoolMapper.selectByPrimaryKey(id);
         List<SysGrade> grades = sysGradeMapper.selectBySchool(id);
         if (null != grades && grades.size() > 0) {

+ 5 - 2
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/SchoolServiceImpl.java

@@ -1,5 +1,6 @@
 package com.usoftchina.smartschool.school.basic.service.impl;
 
+import com.usoftchina.smartschool.context.BaseContextHolder;
 import com.usoftchina.smartschool.exception.BizException;
 import com.usoftchina.smartschool.school.basic.service.SchoolService;
 import com.usoftchina.smartschool.school.exception.BizExceptionCode;
@@ -24,7 +25,9 @@ public class SchoolServiceImpl implements SchoolService {
         if (null == id || "0".equals(id)) {
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
-        SysSchool school = sysSchoolMapper.selectByPrimaryKey(id);
+        Long school_id = BaseContextHolder.getSchoolId();
+        school_id = 1l;
+        SysSchool school = sysSchoolMapper.selectByPrimaryKey(school_id);
         return school;
     }
 
@@ -33,6 +36,6 @@ public class SchoolServiceImpl implements SchoolService {
         if (StringUtils.isEmpty(school) || StringUtils.isEmpty(school.getSchool_id())) {
             throw new BizException(BizExceptionCode.USELESS_DATA);
         }
-        sysSchoolMapper.updateByPrimaryKey(school);
+        sysSchoolMapper.updateByPrimaryKeySelective(school);
     }
 }

+ 1 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/StudentServiceImpl.java

@@ -35,6 +35,7 @@ public class StudentServiceImpl implements StudentService{
     public PageInfo<SysStudent> getListData(PageRequest page, ListReqDTO listReqDTO) {
         PageHelper.startPage(page.getNumber(), page.getSize());
         Long schoolId = BaseContextHolder.getSchoolId();
+        schoolId = 1l;
         //condition语句
         String condition = listReqDTO.getFinalCondition();
         if(condition == null){

+ 1 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/basic/service/impl/TeacherServiceImpl.java

@@ -38,6 +38,7 @@ public class TeacherServiceImpl implements TeacherService{
         if(condition == null){
             condition = "1=1";
         }
+        schoolId = 1l;
         List<SysTeacher> teacherList = sysTeacherMapper.selectByConditon(condition, schoolId);
         PageInfo<SysTeacher> list = new PageInfo<>(teacherList);
         return list;

+ 79 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/controller/ExcelController.java

@@ -0,0 +1,79 @@
+package com.usoftchina.smartschool.school.common.controller;
+
+import com.usoftchina.smartschool.base.Result;
+import com.usoftchina.smartschool.exception.BizException;
+import com.usoftchina.smartschool.school.common.service.ExcelService;
+import com.usoftchina.smartschool.school.exception.BizExceptionCode;
+import com.usoftchina.smartschool.utils.DateUtils;
+import com.usoftchina.smartschool.utils.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 16:25
+ **/
+@RestController
+@RequestMapping("/excel")
+public class ExcelController {
+
+    @Autowired
+    private ExcelService excelService;
+
+    @RequestMapping("/import/templet")
+    public void CreateTemplet(@RequestParam("caller") String caller, HttpServletResponse response) throws IOException {
+        if (StringUtils.isEmpty(caller)) {
+            throw new BizException(BizExceptionCode.USELESS_DATA);
+        }
+        Map<String, Object> map = excelService.CreateTemplet(caller);
+        SXSSFWorkbook workbook = (SXSSFWorkbook)map.get("workbook");
+        String title = map.get("title").toString() + "_" + DateUtils.format(new Date(), "yyyyMMdd");
+        String filename = URLEncoder.encode(title + ".xlsx", "UTF-8");
+        response.setContentType("application/vnd.ms-excel");
+        response.setHeader("Content-Disposition", "attachment;filename=" + filename);
+        OutputStream out;
+        out = response.getOutputStream();
+        workbook.write(out);
+        out.close();
+    }
+
+    @PostMapping(value = "/import/parse", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public Result ParseTemplet(@RequestParam("caller") String caller, @RequestPart(value = "file") MultipartFile file) throws IOException {
+        InputStream is = null;
+        Workbook wb = null;
+        Integer keyvalue = null;
+        long size = file.getSize();
+        if (size > 104857600) {
+            return Result.error(new String(("{error: '文件过大', size:" + size + "}").getBytes("utf-8"), "iso8859-1"));
+        } else {
+            excelService.clearBefore(caller);
+            String ft = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
+            String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+            is = file.getInputStream();
+            if (ft.equals("xlsx")) {
+                wb = new XSSFWorkbook(is);
+            } else if(ft.equals("xls")){
+                wb = new HSSFWorkbook(is);
+            } else {
+                return Result.error(new String("{error: 'excel文件的格式不太规范,导入失败<hr>可以尝试将文件另存为.xls文件,或将数据选择性粘贴到excel模板,然后导入'}".getBytes("utf-8"),
+                        "iso8859-1"));
+            }
+            keyvalue = excelService.parseTemplet(wb, caller, fileName);
+        }
+        return Result.success(keyvalue);
+    }
+}

+ 8 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/controller/MessageLogController.java

@@ -0,0 +1,8 @@
+package com.usoftchina.smartschool.school.common.controller;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 16:23
+ **/
+public class MessageLogController {
+}

+ 14 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/ExcelService.java

@@ -0,0 +1,14 @@
+package com.usoftchina.smartschool.school.common.service;
+
+import org.apache.poi.ss.usermodel.Workbook;
+
+import java.util.Map;
+
+public interface ExcelService {
+
+    Map<String, Object> CreateTemplet(String caller);
+
+    void clearBefore(String caller);
+
+    Integer parseTemplet(Workbook wb, String caller, String title);
+}

+ 8 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/MessageLogService.java

@@ -0,0 +1,8 @@
+package com.usoftchina.smartschool.school.common.service;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 16:23
+ **/
+public interface MessageLogService {
+}

+ 517 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/impl/ExcelServiceImpl.java

@@ -0,0 +1,517 @@
+package com.usoftchina.smartschool.school.common.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import com.usoftchina.smartschool.context.BaseContextHolder;
+import com.usoftchina.smartschool.exception.BizException;
+import com.usoftchina.smartschool.school.common.service.ExcelService;
+import com.usoftchina.smartschool.school.exception.BizExceptionCode;
+import com.usoftchina.smartschool.school.mapper.DataImportMapper;
+import com.usoftchina.smartschool.school.mapper.DataTempletMapper;
+import com.usoftchina.smartschool.school.po.DataImport;
+import com.usoftchina.smartschool.school.po.DataImportDetail;
+import com.usoftchina.smartschool.school.po.DataTemplet;
+import com.usoftchina.smartschool.school.po.TempletSet;
+import com.usoftchina.smartschool.utils.CollectionUtils;
+import com.usoftchina.smartschool.utils.DateUtils;
+import com.usoftchina.smartschool.utils.RegexpUtils;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @author: guq
+ * @create: 2018-11-26 15:19
+ **/
+@Service
+public class ExcelServiceImpl implements ExcelService {
+
+    @Autowired
+    private DataTempletMapper dataTempletMapper;
+    @Autowired
+    private DataImportMapper dataImportMapper;
+
+    @Override
+    public Map<String, Object> CreateTemplet(String caller) {
+        Long companyId = BaseContextHolder.getCompanyId();
+        Map<String, Object> map = new HashMap<>();
+        SXSSFWorkbook workbook = new SXSSFWorkbook();
+        DataTemplet dataTemplet = dataTempletMapper.selectByCaller(caller, companyId);
+        if (null == dataTemplet) {
+            throw new BizException(9876, "没有查询到对应的excel配置");
+        }
+        //列
+        String cols = dataTemplet.getDt_columns();
+        JSONArray array = (JSONArray) JSONArray.parse(cols);
+        //模板数据
+        String remark = dataTemplet.getDt_description();
+        String exampledata = dataTemplet.getDt_exampledata();
+        JSONArray datas = (JSONArray) JSONArray.parse(exampledata);
+        createWorkbook(workbook, 1, array, datas, remark);
+        map.put("workbook", workbook);
+        map.put("title", dataTemplet.getDt_title());
+        return map;
+    }
+
+    @Override
+    public void clearBefore(String caller) {
+        Long schoolId = BaseContextHolder.getSchoolId();
+        String ids = dataImportMapper.selectByCaller(caller, schoolId);
+        if (!StringUtils.isEmpty(ids)) {
+            dataImportMapper.deleteDetailByIds(ids);
+            dataImportMapper.deleteByIds(ids);
+        };
+
+    }
+
+    @Override
+    @Transactional
+    public Integer parseTemplet(Workbook wb, String caller, String fileName) {
+        if (wb == null || StringUtils.isEmpty(caller)) {
+            throw new BizException(BizExceptionCode.EMPTY_DATA);
+        }
+        //Long companyId = BaseContextHolder.getCompanyId();
+        Long school_id = BaseContextHolder.getSchoolId();
+        DataImport di = new DataImport();
+        di.setSchool_id(school_id);
+        di.setDi_caller(caller);
+        di.setDi_date(new Date());
+        di.setDi_man(BaseContextHolder.getUserName());
+        di.setDi_toformal(0);
+        di.setDi_success(0);
+        List<Map<String,String>> datas = new ArrayList<Map<String,String>>();
+        DataTemplet dataTemplet = dataTempletMapper.selectByCaller(caller, school_id);
+        String cols = dataTemplet.getDt_columns();
+        if (StringUtils.isEmpty(cols)) {
+            throw new BizException(12135, "没有查询到对应的excel配置");
+        }
+        //验证标题是否正确
+        String title = dataTemplet.getDt_title();
+        if (StringUtils.isEmpty(fileName) || fileName.indexOf(title) < 0) {
+            throw new BizException(BizExceptionCode.BIZ_IMPORT_ERROREXCEL);
+        }
+        //前端列表信息
+        List<TempletSet> templetSets = JSONArray.parseArray(cols, TempletSet.class);
+        Map<String, List<TempletSet>> columns = CollectionUtils.groupBy(templetSets, TempletSet::getPosition);
+        List<String> positions = SetToList(columns.keySet());
+        String cellData = null;
+        String codeValue = null;
+        //读取默认从第2行开始读取
+        List<String> keys = new ArrayList<>();
+        //获取第一个sheet
+        Sheet sheet = wb.getSheetAt(0);
+        //获取最大行数
+        int rownum = sheet.getPhysicalNumberOfRows();
+        if (rownum < 3) {
+            throw new BizException(12324, "请先填写数据");
+        }
+        //获取第2行
+        Row row = sheet.getRow(1);
+        //获取最大列数
+        int colnum = row.getPhysicalNumberOfCells();
+        String key = null;
+        Map<String,String> map = null;
+        //添加keys
+        for (int j = 0; j < colnum; j++){
+            key = (String) getCellFormatValue(row.getCell(j));
+            keys.add(key);
+        }
+        //存储数据
+        for (int i = 2; i < rownum; i++) {
+            map = new LinkedHashMap<String,String>();
+            row = sheet.getRow(i);
+            if(row !=null){
+                for (int j = 0;j < colnum; j++){
+                    cellData = (String) getCellFormatValue(row.getCell(j));
+                    map.put(keys.get(j), cellData);
+                }
+            }else{
+                break;
+            }
+            datas.add(map);
+        }
+        dataImportMapper.insertSelective(di);
+        Integer keyvalue = di.getDi_id();
+        List<String> validateCode = Lists.newArrayList();
+        //数据转换成字段
+        if (!CollectionUtils.isEmpty(datas)) {
+            StringBuilder err = new StringBuilder();
+            JSONArray mains = new JSONArray();
+            JSONArray details = new JSONArray();
+            //数据行循环
+            for (int i = 0; i < datas.size(); i++) {
+                Map<String,String> data = datas.get(i);
+                DataImportDetail dd = new DataImportDetail();
+                //界面值
+                String value = null;
+                JSONObject mainData = null;
+                JSONObject detailData = null;
+                //标识是否一个主表的数据
+                boolean difference = true;
+                dd.setSchool_id(school_id);
+                dd.setDd_diid(keyvalue);
+                //主从表循环
+                for (int j = 0; j < positions.size(); j++) {
+                    String position = positions.get(j);
+                    //依据主从表分类
+                    if ("main".equals(position)) {
+                        //主表字段配置
+                        List<TempletSet> main = columns.get(position);
+                        for (TempletSet set : main) {
+                            //取excel值
+                            value = data.get(set.getDescription());
+                            //取编号字段
+                            if (set.isCodefield() && !"".equals(value)) {
+                                mainData = new JSONObject();
+                                codeValue = RegexpUtils.replaceSpecialCharacter(value);
+                                difference = true;
+                                validateCode.add(codeValue);
+                                dd.setDd_codevalue(codeValue);
+                            }
+                            //检查是否是同一单
+                            if (set.isCodefield() && "".equals(value)) {
+                                difference = false;
+                                break;
+                            }
+                            //检查主表必填字段是否完整
+                            if (difference) {
+                                if ("true".equals(set.getNecessary()) && "".equals(value)) {
+                                    err.append("第" + (i + 3) + "行 " + set.getDescription() + " 必填字段未填写!<br/> ");
+                                    break;
+                                }
+                            }
+                            //检测日期类型是否规范
+                            if ("date".equals(set.getType()) && !StringUtils.isEmpty(value)) {
+                                value = praseDate(value);
+                                if (null == value) {
+                                    err.append("第" + (i + 3) + "行 " + set.getDescription() + " 日期格式不正确!<br/> ");
+                                    break;
+                                }
+                            }
+                            //如果为数字类型且为空默认赋值0,检测是否为数字类型
+                            if ("number".equals(set.getType())) {
+                                if (StringUtils.isEmpty(value)) {
+                                    value = "0";
+                                } else {
+                                    Boolean numner = isNumner(value);
+                                    if (!numner) {
+                                        err.append("第" + (i + 3) + "行 " + set.getDescription() + " 数字格式不正确!<br/> ");
+                                        break;
+                                    }
+                                }
+                            }
+                            //插入主表数据
+                            if (null != mainData) {
+                                mainData.put(set.getField(), value);
+                            }
+                        }
+                        //所有主表数据进行分类
+                        if (null != mainData) {
+                            //mains.add(mainData);
+                            dd.setDd_maindata(mainData.toJSONString());
+                        }
+                    } else {
+                        //从表字段
+                        List<TempletSet> detail = columns.get(position);
+                        detailData = new JSONObject();
+                        for (TempletSet set : detail) {
+                            //取excel值
+                            value = data.get(set.getDescription());
+                            if ("true".equals(set.getNecessary()) && StringUtils.isEmpty(value)) {
+                                detailData = null;
+                                err.append("第" + (i + 3) + "行 " + set.getDescription() + " 必填字段未填写!<br/> ");
+                                break;
+                            }
+                            //检测日期类型是否规范
+                            if ("date".equals(set.getType()) && !StringUtils.isEmpty(value)) {
+                                value = praseDate(value);
+                                if (null == value) {
+                                    err.append("第" + (i + 3) + "行 " + set.getDescription() + " 日期格式不正确!<br/> ");
+                                    break;
+                                }
+                            }
+                            //如果为数字类型且为空默认赋值0,检测是否为数字类型
+                            if ("number".equals(set.getType())) {
+                                if (StringUtils.isEmpty(value)) {
+                                    value = "0";
+                                } else {
+                                    Boolean numner = isNumner(value);
+                                    if (!numner) {
+                                        err.append("第" + (i + 3) + "行 " + set.getDescription() + " 数字格式不正确!<br/> ");
+                                        break;
+                                    }
+                                }
+                            }
+                            //拼从表数据
+                            if (StringUtils.hasText(value) && !"0".equals(value)) {
+                                detailData.put(set.getField(), value);
+                            }
+                        }
+                        if (null != detailData && detailData.size() > 0) {
+                            dd.setDd_codevalue(codeValue);
+                            dd.setDd_detaildata(detailData.toJSONString());
+                        }
+                    }
+                }
+                //排除编号未填写但是其他字段填写的情况 主表不为空且从表也不为空
+                if (StringUtils.hasText(codeValue) && StringUtils.hasText(dd.getDd_codevalue())) {
+                    dataImportMapper.insertDetailSelective(dd);
+                }
+            }
+            //重复编号检测
+            List<String> samecode = getDuplicateElements(validateCode);
+            if (null != samecode && samecode.size() > 0) {
+                err.append("下列编号重复: " + printList(samecode) + " 请确认无误后再上传!");
+            }
+            //必填项检查
+            if (err.length() > 0) {
+                dataImportMapper.updateErr(err.toString(), keyvalue);
+                throw new BizException(123456789, err.toString());
+            }
+        }
+        return keyvalue;
+    }
+
+    private  <E> List<E> getDuplicateElements(List<E> list) {
+        return list.stream() // list 对应的 Stream
+                .collect(Collectors.toMap(e -> e, e -> 1, (a, b) -> a + b)) // 获得元素出现频率的 Map,键为元素,值为元素出现的次数
+                .entrySet().stream() // 所有 entry 对应的 Stream
+                .filter(entry -> entry.getValue() > 1) // 过滤出元素出现次数大于 1 的 entry
+                .map(entry -> entry.getKey()) // 获得 entry 的键(重复元素)对应的 Stream
+                .collect(Collectors.toList());  // 转化为 List
+    }
+
+    private String printList(List list) {
+        String result = null;
+        if (!StringUtils.isEmpty(list)) {
+            result = list.toString().substring(1, list.toString().length() - 1);
+        }
+        return result;
+    }
+
+
+    private Boolean isNumner(String str) {
+        for(int i=str.length() - 1; i>=0; i--){
+            int chr=str.charAt(i);
+            if(chr < 48 || chr >  57) {
+                if (chr == 46) {
+                    continue;
+                }
+                return false;
+            }
+
+        }
+        return true;
+    }
+
+
+    private boolean validateDateFormat(String date) {
+        boolean flag = false;
+        if (StringUtils.isEmpty(date)) {
+            return false;
+        }
+        String regEx1 = "[0-9]{4}/[0-1][0-9]/[0-3][0-9]";
+        String regEX2 = "[0-9]{4}-[0-1][0-9]-[0-3][0-9]";
+        // 编译正则表达式
+        Pattern pattern1 = Pattern.compile(regEx1);
+        Pattern pattern2 = Pattern.compile(regEX2);
+        Matcher matcher = pattern1.matcher(date);
+        // 字符串是否与正则表达式相匹配
+        flag = matcher.matches();
+        if (!flag) {
+            flag = pattern2.matcher(date).matches();
+        }
+        return flag;
+    }
+
+    private String praseDate(String num) {
+        try {
+            Integer days = Integer.valueOf(num);
+            return DateUtils.plusDay(days, "1899-12-30");
+        }catch (Exception e) {
+            return validateDateFormat(num) ? num : null;
+        }
+    }
+
+    //保证先遍历主表
+    private List<String> SetToList(Set<String> sets) {
+        List<String> list = new ArrayList<>();
+        list.add("main");
+        for (String str : sets) {
+            if (!"main".equals(str)) {
+                list.add(str);
+            }
+        }
+        return list;
+    }
+
+    public static Object getCellFormatValue(Cell cell){
+        Object cellValue = null;
+        if(cell != null){
+            //判断cell类型
+            switch(cell.getCellType()){
+                case Cell.CELL_TYPE_NUMERIC:{
+                    cellValue = String.valueOf(cell.getNumericCellValue());
+                    cellValue = RegexpUtils.replaceSpecialCharacterNotcodefield(cellValue);
+                    //判断是否为INT类型
+                    if (Double.valueOf(cellValue.toString()).intValue() - Double.valueOf(cellValue.toString()) == 0) {
+                        return cellValue.toString().substring(0, cellValue.toString().indexOf("."));
+                    }
+                    break;
+                }
+                case Cell.CELL_TYPE_FORMULA:{
+                    //判断cell是否为日期格式
+                    if(DateUtil.isCellDateFormatted(cell)){
+                        //转换为日期格式YYYY-mm-dd
+                        cellValue = cell.getDateCellValue();
+                        cellValue = RegexpUtils.replaceSpecialCharacterNotcodefield(cellValue);
+                    }else{
+                        //数字
+                        cellValue = String.valueOf(cell.getNumericCellValue());
+                        cellValue = RegexpUtils.replaceSpecialCharacterNotcodefield(cellValue);
+                    }
+                    break;
+                }
+                case Cell.CELL_TYPE_STRING:{
+                    cellValue = cell.getRichStringCellValue().getString();
+                    cellValue = RegexpUtils.replaceSpecialCharacterNotcodefield(cellValue);
+                    break;
+                }
+                default:
+                    cellValue = "";
+            }
+        }else{
+            cellValue = "";
+        }
+        return cellValue;
+    }
+
+
+    protected Cell getCell(Sheet sheet, int row, int col) {
+        Row sheetRow = sheet.getRow(row);
+        if (sheetRow == null) {
+            sheetRow = sheet.createRow(row);
+        }
+        Cell cell = sheetRow.getCell(col);
+        if (cell == null) {
+            cell = sheetRow.createCell(col);
+        }
+        return cell;
+    }
+
+    /**
+     * 生成excel工作表
+     *
+     * 数据
+     */
+    private void createWorkbook(SXSSFWorkbook workbook, int sheetIdx, JSONArray cols, JSONArray datas, String remark){
+        Sheet sheet = workbook.createSheet("sheet" + sheetIdx);
+        CellStyle style = getCellStyle(workbook, true);
+        CellStyle detailStyle = getCellStyle(workbook, false);
+        //sheet.autoSizeColumn(2);
+        // sheet.createFreezePane(0, 1);// 固定列
+        Cell cell = null;
+        int rIdx = 0;
+        int cIdx = 0;
+        short width = 0;
+        DataFormat format = workbook.createDataFormat();
+        Row row = null;
+        if (remark != null) {
+            row = sheet.createRow(rIdx);
+            row.setHeightInPoints((short) 50);
+            sheet.setColumnWidth(cIdx, 500);
+            cell = getCell(sheet, rIdx, cIdx);
+            cell.setCellValue(remark);
+            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, cols.size() - 1));
+            rIdx++;
+        }
+        row = sheet.createRow(rIdx);
+        row.setHeightInPoints((short) 22);
+        List<String> keys = new ArrayList<String>();
+        if (!CollectionUtils.isEmpty(cols)) {
+            String value = "";
+            //列出主表的列
+            for (int i = 0; i < cols.size(); i++) {
+                JSONObject obj = (JSONObject) cols.get(i);
+                width = (short) (obj.get("width") == null ? 0 : (int)obj.get("width")*35.7);
+                width = width == 0 ? 4000 : width;
+                sheet.setColumnWidth(cIdx, width);
+                // sheet.createFreezePane(cols.size() + 1, 2);
+                cell = getCell(sheet, rIdx, cIdx);
+                value = obj.get("description") == null ? value : obj.get("description").toString();
+                if ("true".equals(obj.get("necessary"))) {
+                    value = "*" + value;
+                }
+                if ("date".equals(obj.get("type"))) {
+                    short df= workbook.createDataFormat().getFormat("yyyy-MM-dd");
+                    style.setDataFormat(df);
+                }
+                if ("main".equals(obj.get("position"))) {
+                    cell.setCellStyle(style);
+                } else {
+                    cell.setCellStyle(detailStyle);
+                }
+                cell.setCellValue(value);
+                keys.add(String.valueOf(obj.get("description")));
+                cIdx++;
+                value = "";
+            }
+            rIdx++;
+            if (!CollectionUtils.isEmpty(datas)) {
+                for(Object d :datas) {
+                    JSONObject data = (JSONObject)d;
+                    cIdx = 0;
+                    row = sheet.createRow(rIdx);
+                    row.setHeightInPoints((short) 20);
+                    for (String key : keys) {
+                        Cell c = getCell(sheet, rIdx, cIdx);
+                        if (data.get(key) != null) {
+                            String v = String.valueOf(data.get(key));
+                            if ("".equals(v) || "null".equals(v)) {
+                                c.setCellValue(0);
+                            } else if (!v.matches("^-?[0-9]+(.[0-9]+)?")) {
+                                c.setCellValue(v);
+                            } else {
+                                c.setCellValue(Double.parseDouble(v.replace(",", "")));
+                            }
+                        } else {
+                            c.setCellValue("");
+                        }
+                        cIdx++;
+                    }
+                    rIdx++;
+                }
+            }
+        }
+    }
+
+    private CellStyle getCellStyle(SXSSFWorkbook workbook, boolean main) {
+        CellStyle style = workbook.createCellStyle();
+        Font font = workbook.createFont();
+        font.setFontName("仿宋_GB2312");// 字体
+        font.setFontHeightInPoints((short) 12);// 字号
+        font.setBold(true);
+        font.setColor((short)64);// 颜色
+        style.setFont(font);
+        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setFillForegroundColor(main ? HSSFColor.LIGHT_YELLOW.index : HSSFColor.PALE_BLUE.index);
+        style.setBorderBottom(BorderStyle.MEDIUM);
+        style.setBorderLeft(BorderStyle.MEDIUM);
+        style.setBorderRight(BorderStyle.MEDIUM);
+        style.setBorderTop(BorderStyle.MEDIUM);
+        return style;
+    }
+
+}

+ 11 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/common/service/impl/MessageLogServiceImpl.java

@@ -0,0 +1,11 @@
+package com.usoftchina.smartschool.school.common.service.impl;
+
+import com.usoftchina.smartschool.school.common.service.MessageLogService;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 16:24
+ **/
+public class MessageLogServiceImpl implements MessageLogService{
+
+}

+ 1 - 1
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/exception/BizExceptionCode.java

@@ -8,7 +8,7 @@ import com.usoftchina.smartschool.exception.BaseExceptionCode;
  **/
 public enum BizExceptionCode implements BaseExceptionCode {
 
-
+    BIZ_IMPORT_ERROREXCEL(500002, "导入内容错误"),
     EMPTY_DATA(76100,"数据为空,请填写后再保存"),
     USELESS_DATA(50001, "无效数据");
 

+ 20 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/DataImportMapper.java

@@ -0,0 +1,20 @@
+package com.usoftchina.smartschool.school.mapper;
+
+import com.usoftchina.smartschool.school.po.DataImport;
+import com.usoftchina.smartschool.school.po.DataImportDetail;
+import org.apache.ibatis.annotations.Param;
+
+public interface DataImportMapper {
+    void deleteByCaller(@Param("caller") String caller, @Param("companyid") Long companyid);
+    int insertSelective(DataImport record);
+
+    void updateErr(@Param("err") String err, @Param("id") Integer id);
+
+    String selectByCaller(@Param("caller") String caller, @Param("companyId") Long companyId);
+
+    void deleteByIds(String ids);
+
+    void deleteDetailByIds(String ids);
+
+    void insertDetailSelective(DataImportDetail dd);
+}

+ 9 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/mapper/DataTempletMapper.java

@@ -0,0 +1,9 @@
+package com.usoftchina.smartschool.school.mapper;
+
+import com.usoftchina.smartschool.school.po.DataTemplet;
+import org.apache.ibatis.annotations.Param;
+
+public interface DataTempletMapper {
+
+    DataTemplet selectByCaller(@Param("caller") String caller, @Param("companyid") Long companyid);
+}

+ 100 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/DataImport.java

@@ -0,0 +1,100 @@
+package com.usoftchina.smartschool.school.po;
+
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 16:47
+ **/
+public class DataImport {
+
+    private Integer di_id;
+
+    private String di_caller;
+
+    private Long school_id;
+
+    private Date di_date;
+
+    private Integer di_count;
+
+    private String di_result;
+
+    private Integer di_success;
+
+    private String di_man;
+
+    private Integer di_toformal;
+
+    public Integer getDi_id() {
+        return di_id;
+    }
+
+    public void setDi_id(Integer di_id) {
+        this.di_id = di_id;
+    }
+
+    public String getDi_caller() {
+        return di_caller;
+    }
+
+    public void setDi_caller(String di_caller) {
+        this.di_caller = di_caller == null ? null : di_caller.trim();
+    }
+
+    public Long getSchool_id() {
+        return school_id;
+    }
+
+    public void setSchool_id(Long school_id) {
+        this.school_id = school_id;
+    }
+
+    public Date getDi_date() {
+        return di_date;
+    }
+
+    public void setDi_date(Date di_date) {
+        this.di_date = di_date;
+    }
+
+    public Integer getDi_count() {
+        return di_count;
+    }
+
+    public void setDi_count(Integer di_count) {
+        this.di_count = di_count;
+    }
+
+    public String getDi_result() {
+        return di_result;
+    }
+
+    public void setDi_result(String di_result) {
+        this.di_result = di_result == null ? null : di_result.trim();
+    }
+
+    public Integer getDi_success() {
+        return di_success;
+    }
+
+    public void setDi_success(Integer di_success) {
+        this.di_success = di_success;
+    }
+
+    public String getDi_man() {
+        return di_man;
+    }
+
+    public void setDi_man(String di_man) {
+        this.di_man = di_man == null ? null : di_man.trim();
+    }
+
+    public Integer getDi_toformal() {
+        return di_toformal;
+    }
+
+    public void setDi_toformal(Integer di_toformal) {
+        this.di_toformal = di_toformal;
+    }
+}

+ 109 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/DataImportDetail.java

@@ -0,0 +1,109 @@
+package com.usoftchina.smartschool.school.po;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 18:11
+ **/
+public class DataImportDetail {
+
+    private Integer dd_id;
+
+    private String dd_maindata;
+
+    private Integer dd_detno;
+
+    private Integer dd_diid;
+
+    private Integer dd_checked;
+
+    private Integer dd_success;
+
+    private Integer dd_toformal;
+
+    private Long school_id;
+
+    private String dd_detaildata;
+
+    private String dd_codevalue;
+
+    public Integer getDd_id() {
+        return dd_id;
+    }
+
+    public void setDd_id(Integer dd_id) {
+        this.dd_id = dd_id;
+    }
+
+    public String getDd_maindata() {
+        return dd_maindata;
+    }
+
+    public void setDd_maindata(String dd_maindata) {
+        this.dd_maindata = dd_maindata == null ? null : dd_maindata.trim();
+    }
+
+    public Integer getDd_detno() {
+        return dd_detno;
+    }
+
+    public void setDd_detno(Integer dd_detno) {
+        this.dd_detno = dd_detno;
+    }
+
+    public Integer getDd_diid() {
+        return dd_diid;
+    }
+
+    public void setDd_diid(Integer dd_diid) {
+        this.dd_diid = dd_diid;
+    }
+
+    public Integer getDd_checked() {
+        return dd_checked;
+    }
+
+    public void setDd_checked(Integer dd_checked) {
+        this.dd_checked = dd_checked;
+    }
+
+    public Integer getDd_success() {
+        return dd_success;
+    }
+
+    public void setDd_success(Integer dd_success) {
+        this.dd_success = dd_success;
+    }
+
+    public Integer getDd_toformal() {
+        return dd_toformal;
+    }
+
+    public void setDd_toformal(Integer dd_toformal) {
+        this.dd_toformal = dd_toformal;
+    }
+
+
+    public String getDd_detaildata() {
+        return dd_detaildata;
+    }
+
+    public void setDd_detaildata(String dd_detaildata) {
+        this.dd_detaildata = dd_detaildata == null ? null : dd_detaildata.trim();
+    }
+
+    public String getDd_codevalue() {
+        return dd_codevalue;
+    }
+
+    public void setDd_codevalue(String dd_codevalue) {
+        this.dd_codevalue = dd_codevalue == null ? null : dd_codevalue.trim();
+    }
+
+    public Long getSchool_id() {
+        return school_id;
+    }
+
+    public void setSchool_id(Long school_id) {
+        this.school_id = school_id;
+    }
+}

+ 78 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/DataTemplet.java

@@ -0,0 +1,78 @@
+package com.usoftchina.smartschool.school.po;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 16:42
+ **/
+public class DataTemplet {
+    private Integer dt_id;
+
+    private String dt_caller;
+
+    private String dt_description;
+
+    public String getDt_columns() {
+        return dt_columns;
+    }
+
+    public void setDt_columns(String dt_columns) {
+        this.dt_columns = dt_columns;
+    }
+
+    private String dt_title;
+
+    private String dt_columns;
+
+    public Long getCompanyid() {
+        return companyid;
+    }
+
+    public void setCompanyid(Long companyid) {
+        this.companyid = companyid;
+    }
+
+    private String dt_exampledata;
+
+    private Long companyid;
+
+    public Integer getDt_id() {
+        return dt_id;
+    }
+
+    public void setDt_id(Integer dt_id) {
+        this.dt_id = dt_id;
+    }
+
+    public String getDt_caller() {
+        return dt_caller;
+    }
+
+    public void setDt_caller(String dt_caller) {
+        this.dt_caller = dt_caller == null ? null : dt_caller.trim();
+    }
+
+    public String getDt_description() {
+        return dt_description;
+    }
+
+    public void setDt_description(String dt_description) {
+        this.dt_description = dt_description == null ? null : dt_description.trim();
+    }
+
+    public String getDt_title() {
+        return dt_title;
+    }
+
+    public void setDt_title(String dt_title) {
+        this.dt_title = dt_title == null ? null : dt_title.trim();
+    }
+
+    public String getDt_exampledata() {
+        return dt_exampledata;
+    }
+
+    public void setDt_exampledata(String dt_exampledata) {
+        this.dt_exampledata = dt_exampledata == null ? null : dt_exampledata.trim();
+    }
+
+}

+ 72 - 0
applications/school/school-server/src/main/java/com/usoftchina/smartschool/school/po/TempletSet.java

@@ -0,0 +1,72 @@
+package com.usoftchina.smartschool.school.po;
+
+/**
+ * @author: guq
+ * @create: 2019-01-23 17:57
+ **/
+public class TempletSet {
+    private String description;
+    private int width;
+    private String field;
+    private String necessary;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    private String position;
+    private boolean codefield;
+    private String type;
+
+    public boolean isCodefield() {
+        return codefield;
+    }
+
+    public void setCodefield(boolean codefield) {
+        this.codefield = codefield;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public int getWidth() {
+        return width;
+    }
+
+    public void setWidth(int width) {
+        this.width = width;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getNecessary() {
+        return necessary;
+    }
+
+    public void setNecessary(String necessary) {
+        this.necessary = necessary;
+    }
+
+    public String getPosition() {
+        return position;
+    }
+
+    public void setPosition(String position) {
+        this.position = position;
+    }
+}

+ 151 - 0
applications/school/school-server/src/main/resources/mapper/DataImportMapper.xml

@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.smartschool.school.mapper.DataImportMapper" >
+<delete id="deleteByCaller">
+  delete from data_import where di_caller=#{caller} and school_id=#{school_id} and
+  il_toformal=0 and il_result is not null
+</delete>
+  <delete id="deleteByIds">
+    delete from data_import where di_id in (${value});
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.usoftchina.smartschool.school.po.DataImport" >
+    <selectKey  resultType="java.lang.Integer" keyProperty="di_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    insert into data_import
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="di_caller != null" >
+        di_caller,
+      </if>
+      <if test="school_id != null" >
+        school_id,
+      </if>
+      <if test="di_date != null" >
+        di_date,
+      </if>
+      <if test="di_count != null" >
+        di_count,
+      </if>
+      <if test="di_result != null" >
+        di_result,
+      </if>
+      <if test="di_success != null" >
+        di_success,
+      </if>
+      <if test="di_man != null" >
+        di_man,
+      </if>
+      <if test="di_toformal != null" >
+        di_toformal,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="di_caller != null" >
+        #{di_caller,jdbcType=VARCHAR},
+      </if>
+      <if test="school_id != null" >
+        #{school_id,jdbcType=INTEGER},
+      </if>
+      <if test="di_date != null" >
+        #{di_date,jdbcType=TIMESTAMP},
+      </if>
+      <if test="di_count != null" >
+        #{di_count,jdbcType=INTEGER},
+      </if>
+      <if test="di_result != null" >
+        #{di_result,jdbcType=VARCHAR},
+      </if>
+      <if test="di_success != null" >
+        #{di_success,jdbcType=INTEGER},
+      </if>
+      <if test="di_man != null" >
+        #{di_man,jdbcType=VARCHAR},
+      </if>
+      <if test="di_toformal != null" >
+        #{di_toformal,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+
+  <update id="updateErr" >
+    update data_import
+    set
+    di_result = #{err},
+    di_success = 0
+    where di_id = #{id}
+  </update>
+
+
+  <select id="selectByCaller" resultType="string">
+    select group_concat(di_id) from data_import where di_caller=#{caller} and di_toformal=0 and di_result is not null
+  </select>
+
+
+
+  <delete id="deleteDetailByIds">
+    delete from data_importdetail where dd_diid in (${value})
+  </delete>
+
+  <insert id="insertDetailSelective" parameterType="com.usoftchina.smartschool.school.po.DataImportDetail" >
+    insert into data_importdetail
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="dd_maindata != null" >
+        dd_maindata,
+      </if>
+      <if test="dd_detno != null" >
+        dd_detno,
+      </if>
+      <if test="dd_diid != null" >
+        dd_diid,
+      </if>
+      <if test="dd_checked != null" >
+        dd_checked,
+      </if>
+      <if test="dd_success != null" >
+        dd_success,
+      </if>
+      <if test="dd_toformal != null" >
+        dd_toformal,
+      </if>
+      <if test="school_id != null" >
+        school_id,
+      </if>
+      <if test="dd_detaildata != null" >
+        dd_detaildata,
+      </if>
+      <if test="dd_codevalue != null" >
+        dd_codevalue,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="dd_maindata != null" >
+        #{dd_maindata,jdbcType=VARCHAR},
+      </if>
+      <if test="dd_detno != null" >
+        #{dd_detno,jdbcType=INTEGER},
+      </if>
+      <if test="dd_diid != null" >
+        #{dd_diid,jdbcType=INTEGER},
+      </if>
+      <if test="dd_checked != null" >
+        #{dd_checked,jdbcType=INTEGER},
+      </if>
+      <if test="dd_success != null" >
+        #{dd_success,jdbcType=INTEGER},
+      </if>
+      <if test="dd_toformal != null" >
+        #{dd_toformal,jdbcType=INTEGER},
+      </if>
+      <if test="school_id != null" >
+        #{school_id,jdbcType=INTEGER},
+      </if>
+      <if test="dd_detaildata != null" >
+        #{dd_detaildata,jdbcType=VARCHAR},
+      </if>
+      <if test="dd_codevalue != null" >
+        #{dd_codevalue,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+</mapper>

+ 17 - 0
applications/school/school-server/src/main/resources/mapper/DataTempletMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.smartschool.school.mapper.DataTempletMapper" >
+  <resultMap id="BaseResultMap" type="com.usoftchina.smartschool.school.po.DataTemplet" >
+    <id column="dt_id" property="dt_id" jdbcType="INTEGER" />
+    <result column="dt_caller" property="dt_caller" jdbcType="VARCHAR" />
+    <result column="dt_description" property="dt_description" jdbcType="VARCHAR" />
+    <result column="dt_title" property="dt_title" jdbcType="VARCHAR" />
+    <result column="dt_exampledata" property="dt_exampledata" jdbcType="VARCHAR" />
+    <result column="companyid" property="companyid" jdbcType="INTEGER" />
+    <result column="dt_columns" property="dt_columns" jdbcType="VARCHAR"/>
+  </resultMap>
+
+  <select id="selectByCaller" resultMap="BaseResultMap">
+    select * from data_Templet where dt_caller=#{caller}
+  </select>
+</mapper>

+ 27 - 0
frontend/pc-web/app/view/basic/staff/StaffList.js

@@ -48,6 +48,10 @@ Ext.define('school.view.basic.staff.StaffList', {
                 },
                 hiddenTools: false,
                 toolBtns: [{
+                    xtype: 'button',
+                    text: '导入测试按钮',
+                    handler: me.onImport,
+                }, {
                     xtype: 'button',
                     text: '一键开通'
                 }, {
@@ -98,6 +102,29 @@ Ext.define('school.view.basic.staff.StaffList', {
         this.callParent(arguments);
     },
 
+    onImport:function(){
+        var grid = this.ownerCt.ownerCt;
+        var form = grid.ownerCt,panelEl = form.getEl();
+        var box = panelEl.getBox();
+        var height = box.height;
+        var width = box.width;
+        var win = form.add(Ext.create('school.view.core.base.ImportWindow', {  
+            cls:'x-window-dbfind', 
+            belong:form,  
+            modal:true,
+            height: height * 0.8,
+            width: width * 0.8,
+            title: form._title + '导入',
+            scrollable: true,
+            bodyPadding: 10,
+            constrain: true,
+            closable: true,
+            layout:'fit',
+            renderTo:form.getEl()
+        }));
+        win.show();
+    },
+
     /**
      * 处理部分字段值
      */

+ 21 - 20
frontend/pc-web/app/view/core/base/ImportWindow.js

@@ -227,37 +227,38 @@ Ext.define('school.view.core.base.ImportWindow', {
                             }
 
                             //导入权限校验
-                            var hasPower = false;
-                            Ext.Ajax.request({
-                                url: '/api/commons/'+form.ownerCt.caller+'/import',
-                                async:false,
-                                method: 'GET',
-                                success: function(response, opts) {
-                                    var data = Ext.decode(response.responseText);
-                                    if(data.success){
-                                        hasPower = true
-                                    }
-                                },
-                                failure: function(response, opts) {}
-                            }); 
-                            if(!hasPower){
-                                school.util.BaseUtil.showErrorToast('上传失败:没有 导入 权限');
-                                return false;
-                            }
+                            // var hasPower = false;
+                            // Ext.Ajax.request({
+                            //     url: '/api/commons/'+form.ownerCt.caller+'/import',
+                            //     async:false,
+                            //     method: 'GET',
+                            //     success: function(response, opts) {
+                            //         var data = Ext.decode(response.responseText);
+                            //         if(data.success){
+                            //             hasPower = true
+                            //         }
+                            //     },
+                            //     failure: function(response, opts) {}
+                            // }); 
+                            // if(!hasPower){
+                            //     school.util.BaseUtil.showErrorToast('上传失败:没有 导入 权限');
+                            //     return false;
+                            // }
                             
                             var fd = new FormData();
                             fd.append('file', fileEl.files[0]);
-                            fd.append('caller', myForm.ownerCt.ownerCt.caller);
+                            fd.append('caller', 'GradeAndCLass');
                             form.setLoading(true);
+                            debugger
                             Ext.Ajax.request({
-                                url: '/api/commons/excel/import/parse',//这里是填写需要跨域访问的URL
+                                url: 'http://127.0.0.1:9560/excel/import/parse',//这里是填写需要跨域访问的URL
                                 cors: true,
                                 useDefaultXhrHeader: false,
                                 method: 'post',
                                 rawData: fd,
                                 headers: {
                                     'Access-Control-Allow-Origin': '*',
-                                    'Authorization':  school.util.State.get('session').token,
+                                    //'Authorization':  school.util.State.get('session').token,
                                     //"Content-Type": 'multipart/form-data'  //文件上传的格式, 
                                     "Content-Type":null
                                 },