diff --git a/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java b/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
index 382d024..99c59f9 100644
--- a/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/controller/DoorlistMgrController.java
@@ -289,8 +289,8 @@
         /**
          * 1. 设置列信息：name：列标题   key：	列属性
          */
+          entity.add(new ExcelExportEntity("市民卡号(必填)", "cardno"));
         entity.add(new ExcelExportEntity("姓名", "custname"));
-        entity.add(new ExcelExportEntity("市民卡号(必填)", "cardno"));
         entity.add(new ExcelExportEntity("银行卡号", "bankcarno"));
 //        entity.add(new ExcelExportEntity("物理卡号()","cardphyid"));
 //        entity.add(new ExcelExportEntity("性别", "sex"));
@@ -386,6 +386,9 @@
       int succCnt = 0;
       int errCnt = 0;
       long startTime = System.currentTimeMillis();
+        if (logger.isInfoEnabled()){
+            logger.info("开始进行名单导入");
+        }
       for (CustomerListBean list : doorList) {
 
         String cardno = list.getCardno();
@@ -405,7 +408,9 @@
             tCustomerNoExistInfos.add(list);
             continue;
         }
-
+          if (logger.isInfoEnabled()){
+              logger.info(cardno+"--核心平台验证通过，开始进行导入！");
+          }
         succCnt++;
         tmpi++;
         TCustomer customer = webInterfaceService.findCustomerById(response.getUserid());
@@ -456,7 +461,7 @@
 //            customerTmp.setEmail(list.getEmail());
 //            customerTmp.setMobile(list.getMobile());
 //            customerTmp.setAddr(list.getAddr());
-            customerTmp.setOpendate(now.substring(0, 7));
+            customerTmp.setOpendate(now.substring(0, 8));
             customerTmp.setClosedate(response.getExpiredate());
             customerTmp.setLastsavedtime(now);
             customerTmp.setAddoperid(operid);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
index 1ae8da0..6b014f8 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
@@ -1,5 +1,12 @@
 package com.supwisdom.dlpay.ncmgr.controller;
 
+import cn.afterturn.easypoi.entity.vo.MapExcelConstants;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
+import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
+import cn.afterturn.easypoi.view.PoiBaseView;
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
@@ -20,9 +27,13 @@
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -64,6 +75,11 @@
         return "ncmgr/nc_devweek";
     }
 
+    @RequestMapping("/impdevindex")
+    public String impdevindex(){
+        return "ncmgr/nc_impDev";
+    }
+
     /**
      * 分页查询设备信息
      * @param request
@@ -1147,4 +1163,352 @@
         return map;
     }
 
+    /**
+     * 设备导入模板下载
+     * @param request
+     * @param response
+     */
+    @ResponseBody
+    @RequestMapping("/downNcDevExcelTemplate")
+    public void downNcDevExcelTemplate(HttpServletRequest request, HttpServletResponse response){
+        Map map = new HashMap();
+        try {
+            List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
+            /**
+             * 1. 设置列信息：name：列标题   key：	列属性
+             */
+            entity.add(new ExcelExportEntity("设备名称", "devname"));
+            entity.add(new ExcelExportEntity("设备类型", "devtype"));
+            //entity.add(new ExcelExportEntity("设备使用类型", "usetype")); 默认全部为门禁 MJ
+            entity.add(new ExcelExportEntity("上级设备编号", "fdevid"));
+            entity.add(new ExcelExportEntity("终端物理编号", "devphyid"));
+            entity.add(new ExcelExportEntity("读头号", "devno"));
+            entity.add(new ExcelExportEntity("IP地址", "ip"));
+            entity.add(new ExcelExportEntity("区域编号", "regionid"));
+            entity.add(new ExcelExportEntity("楼栋编号", "buildingid"));
+            List<Map> personList = new ArrayList<Map>();
+            /**
+             * 2.设置表格属性: title:标题  sheetName:工作簿名 type:表格类型
+             */
+            ExportParams params = new ExportParams(null, "sheet1", ExcelType.HSSF);
+            map.put(MapExcelConstants.MAP_LIST, personList);
+            map.put(MapExcelConstants.ENTITY_LIST, entity);
+            map.put(MapExcelConstants.PARAMS, params);
+            map.put(MapExcelConstants.FILE_NAME, "设备导入模板");//文件名
+            map.put("result", "导出excel文件完成");
+            PoiBaseView.render(map, request, response, MapExcelConstants.EASYPOI_MAP_EXCEL_VIEW);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("result", "导出excel文件失败");
+        }
+    }
+
+
+    /**
+     * 设备导入
+     * @param file
+     * @param request
+     * @param response
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/saveNcDevByExcel",method = {RequestMethod.POST})
+    public Map saveNcDevByExcel(@RequestParam(value = "file", required = false) MultipartFile file,
+                                   HttpServletRequest request,HttpServletResponse response){
+        Map map = new HashMap();
+        try {
+            String devTypeId = request.getParameter("devTypeId");
+            String path = request.getSession().getServletContext().getRealPath("upload");
+            String fileName = file.getOriginalFilename();
+            File targetFile = new File(path, fileName);
+            if (!targetFile.exists()) {
+                targetFile.mkdirs();
+            }
+            file.transferTo(targetFile);
+            map = impNcDevList(path + "/" + fileName,devTypeId, map);
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        return map;
+    }
+
+    private Map impNcDevList(String fpath,String devTypeId,Map map){
+        ImportParams params = new ImportParams();
+        params.setTitleRows(0);
+        List<TNcDevice> tNcDeviceList = ExcelImportUtil.importExcel(new File(fpath), TNcDevice.class, params);
+        int totCnt = tNcDeviceList.size();
+        int flag = 0;
+        if (totCnt<=0){
+            map.put("impDev_succ","导入文件中未查询到数据！");
+            flag = -1;
+            map.put("flag", flag);
+            return map;
+        }
+        String failStr = "";
+        try{
+            TNcDevice device;
+
+            //判断导入数据是否合法
+            for (int i=0;i<tNcDeviceList.size();i++){
+                if (tNcDeviceList.get(i).getRegionid()==null||"".equals(tNcDeviceList.get(i).getRegionid())){
+                    failStr = "第"+(i+1)+"条数据--设备所属区域编号为空！";
+                    map.put("impDev_succ",failStr);
+                    flag = -1;
+                    map.put("flag", flag);
+                    return map;
+                }
+                TRegion regionById = systemService.getRegionById(tNcDeviceList.get(i).getRegionid());
+                if (regionById==null){
+                    failStr = "第"+(i+1)+"条数据--设备所属区域不存在！";
+                    map.put("impDev_succ",failStr);
+                    flag = -1;
+                    map.put("flag", flag);
+                    return map;
+                }
+
+                if (tNcDeviceList.get(i).getBuildingid()==null||"".equals(tNcDeviceList.get(i).getBuildingid())){
+                    failStr = "第"+(i+1)+"条数据--设备所属楼栋编号为空！";
+                    map.put("impDev_succ",failStr);
+                    flag = -1;
+                    map.put("flag", flag);
+                    return map;
+                }
+                TBuilding buildingById = systemService.getBuildingById(tNcDeviceList.get(i).getBuildingid());
+                if (buildingById==null){
+                    failStr = "第"+(i+1)+"条数据--设备所属楼栋不存在！";
+                    map.put("impDev_succ",failStr);
+                    flag = -1;
+                    map.put("flag", flag);
+                    return map;
+                }
+
+                //控制器设备类型
+                if (devTypeId.equals("C")){
+                    if (!tNcDeviceList.get(i).getDevtype().equals("C")){
+                        failStr = "第"+(i+1)+"条数据--设备类型和所选设备类型不一致！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevphyid()==null){
+                        failStr = "第"+(i+1)+"条数据--终端物理编号为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevname()==null){
+                        failStr = "第"+(i+1)+"条数据--设备名称为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevtype()==null){
+                        failStr = "第"+(i+1)+"条数据--设备类型为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    device = ncService.validDevPhyid(0,tNcDeviceList.get(i).getDevphyid());
+                    if (device!=null && device.getDeviceid()>0){
+                        failStr = "第"+(i+1)+"条数据--终端物理编号已存在！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    device = ncService.validDevName(0,tNcDeviceList.get(i).getDevname());
+                    if (device!=null && device.getDeviceid()>0){
+                        failStr = "第"+(i+1)+"条数据--设备名称已存在！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getFdevid()!=null){
+                        failStr = "第"+(i+1)+"条数据--控制器类型上级设备必须为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevno()!=null){
+                        failStr = "第"+(i+1)+"条数据--控制器类型读头号必须为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevtype().equals("C") && tNcDeviceList.get(i).getDevphyid().length()!=12){
+                        failStr = "第"+(i+1)+"条数据--控制器类型终端物理编号必须为12位！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                }
+
+
+                //读头设备类型
+                if (devTypeId.equals("R")){
+                    if (!tNcDeviceList.get(i).getDevtype().equals("R")){
+                        failStr = "第"+(i+1)+"条数据--设备类型和所选设备类型不一致！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevphyid()==null){
+                        failStr = "第"+(i+1)+"条数据--终端物理编号为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevname()==null){
+                        failStr = "第"+(i+1)+"条数据--设备名称为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevtype()==null){
+                        failStr = "第"+(i+1)+"条数据--设备类型为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    device = ncService.validDevPhyid(0,tNcDeviceList.get(i).getDevphyid());
+                    if (device!=null && device.getDeviceid()>0){
+                        failStr = "第"+(i+1)+"条数据--终端物理编号已存在！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    device = ncService.validDevName(0,tNcDeviceList.get(i).getDevname());
+                    if (device!=null && device.getDeviceid()>0){
+                        failStr = "第"+(i+1)+"条数据--设备名称已存在！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevtype().equals("R") && tNcDeviceList.get(i).getFdevid()==null){
+                        failStr = "第"+(i+1)+"条数据--读头类型上级设备不可为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevtype().equals("R") && tNcDeviceList.get(i).getDevno()==null){
+                        failStr = "第"+(i+1)+"条数据--读头类型读头号不可为空！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    if (tNcDeviceList.get(i).getDevtype().equals("R")){
+                        device = ncService.findDevById(tNcDeviceList.get(i).getFdevid());
+                        if (device==null){
+                            failStr = "第"+(i+1)+"条数据--此上级设备不存在！";
+                            map.put("impDev_succ",failStr);
+                            flag = -1;
+                            map.put("flag", flag);
+                            return map;
+                        }
+                    }
+                    device = ncService.findDevById(tNcDeviceList.get(i).getFdevid());
+                    if (!(device.getDevtype().equals("C"))){
+                        failStr = "第"+(i+1)+"条数据--此上级设备不为控制器！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                    device=ncService.validDevNo(tNcDeviceList.get(i).getFdevid(),tNcDeviceList.get(i).getDevno(),0);
+                    if (device!=null && device.getDeviceid()>0){
+                        failStr = "第"+(i+1)+"条数据--该控制器下此读头号已存在！";
+                        map.put("impDev_succ",failStr);
+                        flag = -1;
+                        map.put("flag", flag);
+                        return map;
+                    }
+                }
+
+            }
+
+            //批量添加设备
+            int successCnt = 0;
+            int errCnt = 0;
+            for (TNcDevice tNcDeviceTemp:tNcDeviceList){
+                TNcDevice validDevName = ncService.validDevName(0, tNcDeviceTemp.getDevname());
+                if (validDevName!=null && validDevName.getDeviceid()>0){
+                    errCnt++;
+                    continue;
+                }
+                TNcDevice validDevPhyid = ncService.validDevPhyid(0, tNcDeviceTemp.getDevphyid());
+                if (validDevPhyid!=null){
+                    errCnt++;
+                    continue;
+                }
+                if (tNcDeviceTemp.getDevtype().equals("R")){
+                    TNcDevice validDevNo = ncService.validDevNo(tNcDeviceTemp.getFdevid(), tNcDeviceTemp.getDevno(), 0);
+                    if (validDevNo!=null){
+                        errCnt++;
+                        continue;
+                    }
+                    RedisUtil.del("ncdev_" + tNcDeviceTemp.getDevphyid() + "_" + tNcDeviceTemp.getDevno());
+                    RedisUtil.set("ncdev_" + tNcDeviceTemp.getDevphyid() + "_" + tNcDeviceTemp.getDevno(),String.valueOf(tNcDeviceTemp.getDeviceid()));
+                }
+                int maxId = ncService.getMaxId();
+                TNcDevice devAdd = new TNcDevice();
+                devAdd.setDeviceid(maxId+1);
+                devAdd.setDevname(tNcDeviceTemp.getDevname());
+                devAdd.setDevphyid(tNcDeviceTemp.getDevphyid().toUpperCase());
+                devAdd.setDevtype(tNcDeviceTemp.getDevtype());
+                devAdd.setFdevid(tNcDeviceTemp.getFdevid());
+                if (tNcDeviceTemp.getDevtype().equals("C")){
+                    devAdd.setDevno(0);//控制器读头为0
+                }else {
+                    devAdd.setDevno(tNcDeviceTemp.getDevno());
+                }
+                devAdd.setIp(tNcDeviceTemp.getIp());
+                devAdd.setOperflag("A");
+                devAdd.setSyncflag("S");
+                String now = DateUtil.getNow();
+                devAdd.setSynctime(now);
+                devAdd.setUpdtime(now);
+                devAdd.setUsetype("MJ");//设备使用类型全为门禁"MJ"
+                devAdd.setRegionid(tNcDeviceTemp.getRegionid());
+                devAdd.setBuildingid(tNcDeviceTemp.getBuildingid());
+                TBuilding buildingById = systemService.getBuildingById(tNcDeviceTemp.getBuildingid());
+                devAdd.setBuildingname(buildingById.getBuildingname());
+                if(tNcDeviceTemp.getDevtype().equals("R")){
+                    TNcDevice fdev = ncService.findDevById(tNcDeviceTemp.getFdevid());
+                    RedisUtil.set("ncdev_" + fdev.getDevphyid() + "_" + tNcDeviceTemp.getDevno(),String.valueOf(devAdd.getDeviceid()));
+                }
+                ncService.saveDevice(devAdd);
+                successCnt++;
+            }
+            map.put("resultStr","共导入"+totCnt+"条数据,"+successCnt+"条数据成功,"+errCnt+"条数据失败！");
+            map.put("impDev_succ", "");
+        }catch (Exception e){
+            map.put("impDev_succ","导入失败");
+            logger.error("设备名单导入失败--"+e.getMessage());
+            flag = -2;
+            map.put("flag", flag);
+            return map;
+        }
+        map.put("flag", flag);
+        return map;
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
index 2b3d7f1..c280e6e 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
@@ -59,4 +59,6 @@
     public List<TDoordevInfo> getOperatorDevList(String devname,String regionid,String buildingid,String operRegionid);
 
     public List<TDoordevInfo> getBuildingOperDevList(String devname,String regionid,String buildingid,String operid);
+
+    public void updateBuildingnameByBuildingid(String buildingid,String buildingname);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
index 69195bc..bdbc13c 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
@@ -684,4 +684,14 @@
         List<TDoordevInfo> list = query.getResultList();
         return list;
     }
+
+    @Transactional
+    @Override
+    public void updateBuildingnameByBuildingid(String buildingid, String buildingname) {
+        String sql = "update t_nc_device set buildingname=:buildingname where buildingid = :buildingid";
+        Query query = entityManager.createNativeQuery(sql);
+        query.setParameter("buildingid", buildingid);
+        query.setParameter("buildingname" ,buildingname );
+        query.executeUpdate();
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
index e0bd051..67bf9a9 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
@@ -33,11 +33,10 @@
 	private Integer devno;
 	@Excel(name = "设备使用类型")
 	private String usetype;
-	@Excel(name="设备所在楼栋编号")
+	@Excel(name="楼栋编号")
 	private String buildingid;
-	@Excel(name = "设备所在楼栋名称")
 	private String buildingname;
-	@Excel(name = "设备所在区域编号")
+	@Excel(name = "区域编号")
 	private String regionid;
 
 	// Constructors
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
index 41b5fa3..ecfce32 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
@@ -87,6 +87,10 @@
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public void delDevById(int devid);
 
+    //根据楼栋id更新设备的所属楼栋名称
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public void updateBuildingnameByBuildingid(String buildingid,String buildingname);
+
     //根据设备编号查询是否绑定时间周
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean getDevWeekByDevid(int devid);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
index a949f67..b038b9b 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
@@ -126,6 +126,11 @@
     }
 
     @Override
+    public void updateBuildingnameByBuildingid(String buildingid, String buildingname) {
+        ncDeviceDao.updateBuildingnameByBuildingid(buildingid, buildingname);
+    }
+
+    @Override
     public boolean getDevWeekByDevid(int devid) {
         return ncDevWeekDao.getDevWeekByDevid(devid);
     }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
index 8116b13..375ec39 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
@@ -586,6 +586,10 @@
             building.setFlag("A");
 
             systemService.updateBuilding(building);
+
+            //修改楼栋信息后相应更新设备的栋楼信息
+            ncService.updateBuildingnameByBuildingid(postData.getBuildingid(), postData.getBuildingname());
+
             map.put("errStr", "");
         }catch (Exception e){
             e.printStackTrace();
diff --git a/src/main/resources/templates/ncmgr/nc_dev.html b/src/main/resources/templates/ncmgr/nc_dev.html
index c09c728..e701a07 100644
--- a/src/main/resources/templates/ncmgr/nc_dev.html
+++ b/src/main/resources/templates/ncmgr/nc_dev.html
@@ -278,7 +278,7 @@
                     </el-form-item>
                     <el-form-item label="读头号:" prop="devno">
                         <el-col :span="18">
-                            <el-input v-model.number="devUpform.devno" :disabled="devnoDis"
+                            <el-input v-model="devUpform.devno" :disabled="devnoDis"
                                       placeholder="读头需输入读头号" style="width: 187px;" maxlength="2">
 
                             </el-input>
diff --git a/src/main/resources/templates/ncmgr/nc_impDev.html b/src/main/resources/templates/ncmgr/nc_impDev.html
new file mode 100644
index 0000000..cec1788
--- /dev/null
+++ b/src/main/resources/templates/ncmgr/nc_impDev.html
@@ -0,0 +1,184 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">设备管理</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">设备管理</a>
+          <a><cite>设备导入</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body" id="impDev">
+        <div  id="impDev_impExcel" v-loading.lock="loading"
+             element-loading-text="拼命导入ing不要取消~~~"
+             element-loading-spinner="el-icon-loading"
+             element-loading-background="rgba(0, 0, 0, 0.8)">
+            <el-alert
+                    title="设备导入："
+                    type="info"
+                    :closable="false">
+            </el-alert>
+            <el-form :inline="true" ref="impDevForm" label-width="130px"
+                     data-parsley-validate class="form-horizontal form-label-left el-form-item el-form-item--mini">
+                <el-row>
+                    <el-col :span="12" style="margin-top: 15px">
+                        <el-form-item label="选择设备类型">
+                            <el-select v-model="devTypeId" placeholder="请选择要导入的设备类型">
+                                <el-option
+                                        v-for="dt in devType"
+                                        :key="dt.value"
+                                        :label="dt.label"
+                                        :value="dt.value"
+                                >
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <br>
+                <el-row>
+                    <el-col :span="12">
+                        <el-form-item label="选择导入文件" style="height: 56px">
+                            <form th:attr="action=@{/ncmgr/saveNcDevByExcel}" method="post" style="float:left;" id="impDev_uploadExcelId" name="formUpload" enctype="multipart/form-data" target="_top">
+
+                                <el-button size="small" type="primary" @click="impDev_openExcel">打开Excel<i class="el-icon-upload el-icon--right"></i></el-button>
+
+                                <label >文件路径: {{ textfield }}</label>
+                                <el-input v-model="devTypeId" type="hidden" name="devTypeId"></el-input>
+                                <el-input v-model="textfield" type="hidden" name="textfield" ></el-input>
+
+                                <input type="file" name="file" style="display: none" id="impDev_filePath" onchange="impDev_vue.textfield=this.value" />
+                            </form>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="12">
+                        <el-form-item label="开始导入">
+                            <el-button style="margin-top: 3px;" size="small"  type="el-button el-button--success" @click="impDev_inExcel">导入设备</el-button>
+                        </el-form-item>
+                    </el-col>
+
+                </el-row>
+
+            </el-form>
+
+            <el-alert
+                    title="导入说明："
+                    type="warning"
+                    :closable="false">
+            </el-alert>
+            <label style="margin-top: 5px">请先导入控制器再导入读头，导入excel格式为xls&nbsp;&nbsp;<el-button size="small" type="success" plain @click="impDev_downTemplate">模板下载</el-button></label><br>
+            <label>为提高效率，推荐一次性导入200条以内&nbsp;&nbsp;</label><br>
+            <el-tag type="danger">导入控制器类型说明如下：</el-tag><br>
+            <label >1、终端物理编号、设备类型、设备名称为必填项，上级设备编号和读头号不可填写</label><br>
+            <label >2、终端物理编号和设备名称不可重复</label><br>
+            <label >3、设备类型填写"C"</label><br>
+            <label >4、终端物理编号必须为12位，不够前面补0</label><br>
+            <el-tag type="danger">导入读头类型说明如下：</el-tag><br>
+            <label >1、终端物理编号、设备类型、设备名称、上级设备编号、读头号都为必填项</label><br>
+            <label >2、终端物理编号和设备名称不可重复</label><br>
+            <label >3、设备类型填写"R"</label><br>
+            <label >4、上级设备编号请根据已导入的控制器信息到设备管理页面编号所在列查询</label><br>
+            <label >5、终端物理编号为所填上级设备终端物理编号加上0加上读头号，如：XXXXXXXXXXXX03</label><br>
+            <label >6、同一个控制器下读头号不可重复</label>
+        </div>
+
+
+    </div>
+</div>
+
+<script>
+    var impDev_vue = new Vue({
+        el:"#impDev",
+        data: {
+            devType:[{
+                value:'C',
+                label:'控制器'
+            },{
+                value:'R',
+                label:'读头'
+            }],
+            devTypeId:'',
+            textfield:'',
+            per_sheetname:'sheet1',
+            exceltable:[],
+            loading:false,
+            impDevForm:{
+
+            }
+        },
+        methods: {
+            impDev_downTemplate:function(val) {
+                console.log("下载模板");
+                var url ="[[@{/ncmgr/downNcDevExcelTemplate}]]";
+                window.location.href=url;
+            },
+            impDev_openExcel:function () {
+                $("#impDev_filePath").click();
+                this.textfield=$("#impDev_filePath").val();
+            },
+            impDev_inExcel:function () {
+                if (this.devTypeId==""){
+                    layer.msg('请选择要导入的设备类型', {icon: 2, time: 1000});
+                    return;
+                }
+                var path=JSON.parse(JSON.stringify(this.textfield));
+                var file=path.substring(path.lastIndexOf(".") + 1);
+                impDev_uploadExcel(path,file);
+                this.textfield='';
+                this.devTypeId='';
+            },
+
+        },
+        created: function () {
+
+        }
+
+    })
+
+    function impDev_uploadExcel(path,file) {
+        if (path.length == 0) {
+            layer.msg('请选择要上传的文件!', {icon: 2, time: 1000});
+            return;
+        }
+        if (path.length > 0){
+            fileIndex = 0;
+            fileName = path;
+            if ("xls"!=file){
+                layer.msg('请选择要上传的文件，格式只能为.xls的表格文件!',{icon: 2, time: 2000});
+            }else {
+                $("#fileNameId").text(path);
+                importIndex = 0;
+                var sheetName = JSON.parse(JSON.stringify(impDev_vue.per_sheetname));
+                if (sheetName == ""){
+                    layer.msg('请写出表单的名字！', {icon: 2, time: 1000});
+                    sheetIndex = 0;
+                    return;
+                } else {
+                    var token=$("meta[name='_csrf_token']").attr("value");
+                    impDev_vue.loading = true;
+                    var options = {
+                        success:   "",
+                        type:      'post',
+                        dataType:  'json',
+                        headers: {
+                            'Accept': 'application/json',
+                            'X-CSRF-TOKEN': token,
+                        },
+                        processData:false,
+                        contentType: false,
+                        success:function (info) {
+                            impDev_vue.loading = false;
+                            if (info.flag == 0){
+                                layer.alert(info.resultStr, {icon: 6});
+                            } else {
+                                layer.alert(info.impDev_succ, {icon: 5});
+                            }
+                        }
+                    };
+                    $('#impDev_uploadExcelId').ajaxSubmit(options);
+                }
+            }
+        }
+    }
+
+</script>
\ No newline at end of file
