会议签到展示提交
diff --git a/build.gradle b/build.gradle
index 3c7b3e1..71be02a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -81,7 +81,7 @@
     implementation group: 'taglibs', name: 'standard', version: '1.1.2'
     implementation group: 'commons-codec', name: 'commons-codec', version: '1.13'
     implementation files('libs/ojdbc6.jar')
-
+    implementation group: 'com.google.zxing', name: 'core', version: '3.3.3'
     implementation 'cn.afterturn:easypoi-web:3.0.3'
     implementation 'cn.afterturn:easypoi-base:3.0.3'
 
@@ -93,7 +93,7 @@
     compileOnly 'org.projectlombok:lombok:1.18.8'
 
     compile 'com.supwisdom:payapi-sdk:1.0.10'
-
+    
     testImplementation 'org.springframework.boot:spring-boot-starter-test'
     testImplementation 'io.rest-assured:rest-assured:3.3.0'
     testImplementation 'io.rest-assured:spring-mock-mvc:3.3.0'
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceReq.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceReq.java
new file mode 100644
index 0000000..3c32907
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceReq.java
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+
+public class ConferenceReq  {
+    private String confdate;
+
+    public String getConfdate() {
+        return confdate;
+    }
+
+    public void setConfdate(String confdate) {
+        this.confdate = confdate;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceResp.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceResp.java
new file mode 100644
index 0000000..c6c5714
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceResp.java
@@ -0,0 +1,28 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+import com.supwisdom.dlpay.api.bean.ApiResponse;
+import com.supwisdom.dlpay.conference.domain.TConference;
+
+import java.util.List;
+
+public class ConferenceResp extends ApiResponse {
+    private Integer count;
+    private List<TConference> conflist;
+
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public List<TConference> getConflist() {
+        return conflist;
+    }
+
+    public void setConflist(List<TConference> conflist) {
+        this.conflist = conflist;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
new file mode 100644
index 0000000..6bf54fa
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
@@ -0,0 +1,45 @@
+package com.supwisdom.dlpay.conference.api.controller;
+
+import com.supwisdom.dlpay.conference.api.bean.ConferenceReq;
+import com.supwisdom.dlpay.conference.api.bean.ConferenceResp;
+import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
+import com.supwisdom.dlpay.conference.domain.TConference;
+import com.supwisdom.dlpay.conference.service.ConferenceService;
+import com.supwisdom.dlpay.framework.data.SystemDateTime;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/api/conference")
+public class ConerenceApiController {
+  @Autowired
+  private SystemUtilService systemUtilService;
+  @Autowired
+  private ConferenceService conferenceService;
+
+  @RequestMapping(value = "/login", method = RequestMethod.POST)
+  @ResponseBody
+  public ConferenceResp getConferenceToday(@ModelAttribute ConferenceReq req) {
+    ConferenceResp resp = new ConferenceResp();
+    String confdate=req.getConfdate();
+    if(StringUtil.isEmpty(confdate)){
+      resp.setRetcode(99);
+      resp.setRetmsg("日期为空");
+      return resp;
+    }
+    List<TConference> conflist=conferenceService.getConferenceByDateAndStatus(confdate,"");
+    resp.setConflist(conflist);
+    resp.setCount(conflist.size());
+    resp.setRetmsg("OK");
+    resp.setRetcode(0);
+    return resp;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/controller/ConfPeopleController.java b/src/main/java/com/supwisdom/dlpay/conference/controller/ConfPeopleController.java
index 4d49878..6d3dd92 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConfPeopleController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConfPeopleController.java
@@ -46,9 +46,9 @@
         String deptcode=oper.getDeptcode();
         List<TConference> conf=conferenceService.getAllConference(deptcode);
         for(TConference c:conf){
-            String conftype="有名单";
+            String conftype="名单会议";
             if(ConferenceConstant.CONFTYPE_NOLIST.equals(c.getConftype())){
-                conftype="无名单";
+                conftype="临时会议";
             }
             String date= DateUtil.reformatDatetime(c.getConfdate(),"yyyyMMdd","yyyy-MM-dd");
             c.setConfname(c.getConfname()+"  "+date+"  "+conftype);
diff --git a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
index aa2e548..3d865ce 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.conference.domain.TConferenceDevbind;
 import com.supwisdom.dlpay.conference.service.ConferenceService;
 import com.supwisdom.dlpay.conference.util.ConferenceConstant;
+import com.supwisdom.dlpay.conference.util.QRCodeUtil;
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
@@ -25,6 +26,7 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
@@ -40,7 +42,6 @@
     private NcService ncService;
 
 
-
     @GetMapping("/conference/index")
     public String ConferenceView() {
         return "conference/conflist";
@@ -49,16 +50,16 @@
     @GetMapping("/conference/conflist")
     @ResponseBody
     public PageResult<ConferenceShowBean> searchConflist(@RequestParam("page") Integer pageNo,
-                                                              @RequestParam("limit") Integer pageSize,
-                                                              @RequestParam(value = "confname", required = false) String confname,
-                                                              @RequestParam(value = "conftype", required = false) String conftype,
+                                                         @RequestParam("limit") Integer pageSize,
+                                                         @RequestParam(value = "confname", required = false) String confname,
+                                                         @RequestParam(value = "conftype", required = false) String conftype,
                                                          @AuthenticationPrincipal UserDetails operUser) {
         try {
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
             if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
             TOperator oper = (TOperator) operUser;
-            String deptcode=oper.getDeptcode();
-            return conferenceService.getConferenceInfos(confname, conftype,deptcode, pageNo, pageSize);
+            String deptcode = oper.getDeptcode();
+            return conferenceService.getConferenceInfos(confname, conftype, deptcode, pageNo, pageSize);
         } catch (Exception e) {
             e.printStackTrace();
             return new PageResult<>(99, "系统查询错误");
@@ -85,66 +86,85 @@
         }
     }
 
+    @PostMapping("/conference/deleteconfpeople")
+    @ResponseBody
+    public JsonResult deleteConfPeople(@RequestParam String pid) {
+        try {
+            if (null == pid) {
+                return JsonResult.error("参数传递错误");
+            }
+            if (conferenceService.deleteConfPeople(pid)) {
+                return JsonResult.ok("删除成功!");
+            } else {
+                return JsonResult.error("删除失败!");
+            }
+        } catch (WebCheckException ex) {
+            return JsonResult.error(ex.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+    }
+
 
     @GetMapping("/conference/load4addconf")
     public String load4addConference(Model model) {
-        String now=DateUtil.getNow("yyyyMMdd");
-        model.addAttribute("maxdate",DateUtil.reformatDatetime(now,"yyyyMMdd","yyyy-MM-dd"));
-        List<TNcDevice> devices=ncService.getSystemDevByType(ConferenceConstant.DEVICETYPE_CONFERENCE);
-        model.addAttribute("confdevice",devices);
+        String now = DateUtil.getNow("yyyyMMdd");
+        model.addAttribute("maxdate", DateUtil.reformatDatetime(now, "yyyyMMdd", "yyyy-MM-dd"));
+        List<TNcDevice> devices = ncService.getSystemDevByType(ConferenceConstant.DEVICETYPE_CONFERENCE);
+        model.addAttribute("confdevice", devices);
         return "conference/confform";
     }
 
-  
 
     @PostMapping("/conference/addconf")
     @ResponseBody
     public JsonResult editConference(@RequestParam("confname") String confname,
-                                       @RequestParam("conftype") String conftype,
-                                       @RequestParam("confdate") String confdate,
-                                       @RequestParam("starttime") String starttime,
-                                       @RequestParam("endtime") String endtime,
-                                       @RequestParam("attendtime") String attendtime,
-                                       @RequestParam("deviceid") Integer deviceid,
-                                       @RequestParam(value = "file", required = false) MultipartFile file,
-                                       @AuthenticationPrincipal UserDetails operUser,
-                                       HttpServletRequest request) {
+                                     @RequestParam("conftype") String conftype,
+                                     @RequestParam("confdate") String confdate,
+                                     @RequestParam("starttime") String starttime,
+                                     @RequestParam("endtime") String endtime,
+                                     @RequestParam("attendtime") String attendtime,
+                                     @RequestParam("deviceid") Integer deviceid,
+                                     //    @RequestParam(value = "file", required = false) MultipartFile file,
+                                     @AuthenticationPrincipal UserDetails operUser,
+                                     HttpServletRequest request) {
         try {
             if (StringUtil.isEmpty(confname)
-                    ||null==deviceid
-                    || (!ConferenceConstant.CONFTYPE_LIST.equals(conftype) && !ConferenceConstant.CONFTYPE_NOLIST.equals(conftype) )
+                    || null == deviceid
+                    || (!ConferenceConstant.CONFTYPE_LIST.equals(conftype) && !ConferenceConstant.CONFTYPE_NOLIST.equals(conftype))
                     || !DateUtil.checkDatetimeValid(starttime, "HH:mm")
                     || !DateUtil.checkDatetimeValid(endtime, "HH:mm")
                     || !DateUtil.checkDatetimeValid(attendtime, "HH:mm")) {
                 return JsonResult.error("参数传递错误");
             } else if (DateUtil.compareDatetime(endtime, starttime, "HH:mm") <= 0) {
                 return JsonResult.error("时间范围错误,结束时间必须比起始时间大");
-            }else if (DateUtil.compareDatetime(starttime, attendtime, "HH:mm") <= 0) {
+            } else if (DateUtil.compareDatetime(starttime, attendtime, "HH:mm") <= 0) {
                 return JsonResult.error("时间范围错误,起始时间必须比签到时间大");
             }
             TOperator oper = (TOperator) operUser;
             if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
                 return JsonResult.error("登录过期,请重新登录");
             }
-            String path = request.getSession().getServletContext().getRealPath("upload");
+           /* String path = request.getSession().getServletContext().getRealPath("upload");
 
-            String fpath=null;
-            if(null!=file){
+            String fpath = null;
+            if (null != file) {
                 String fileName = file.getOriginalFilename();
                 File targetFile = new File(path, fileName);
                 if (!targetFile.exists()) {
                     targetFile.mkdirs();
                 }
                 file.transferTo(targetFile);
-                fpath=path + "/" + fileName;
-            }
+                fpath = path + "/" + fileName;
+            }*/
 
-            if (conferenceService.saveNewConference(confname.trim(),DateUtil.unParseToDateFormat(confdate), conftype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime),DateUtil.unParseToDateFormat(attendtime), oper,fpath,deviceid)) {
+            if (conferenceService.saveNewConference(confname.trim(), DateUtil.unParseToDateFormat(confdate), conftype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime), DateUtil.unParseToDateFormat(attendtime), oper,  deviceid)) {
                 return JsonResult.ok("新增成功");
             } else {
                 return JsonResult.error("新增失败");
             }
-        }catch (WebCheckException e) {
+        } catch (WebCheckException e) {
             return JsonResult.ok(599, e.getMessage());
         } catch (Exception e) {
             e.printStackTrace();
@@ -185,21 +205,21 @@
     @GetMapping("/conference/load4detail")
     public String load4ConfDetails(@RequestParam("confid") Integer confid, Model model) {
         model.addAttribute("detailConfid", confid);
-        TNcDevice device=conferenceService.getBindedDevice(confid);
-        String devname="未绑定";
-        if(null!=device){
-            devname=device.getDevname();
+        TNcDevice device = conferenceService.getBindedDevice(confid);
+        String devname = "未绑定";
+        if (null != device) {
+            devname = device.getDevname();
         }
-        model.addAttribute("deviceName",devname);
+        model.addAttribute("deviceName", devname);
         return "conference/confdetail";
     }
 
     @GetMapping("/conference/load4detaillist")
     @ResponseBody
     public PageResult<TConfPeople> searchConfPeople(@RequestParam("page") Integer pageNo,
-                                                       @RequestParam("limit") Integer pageSize,
-                                                       @RequestParam("confid") Integer confid,
-                                                       @RequestParam(value = "searchkey", required = false) String searchkey) {
+                                                    @RequestParam("limit") Integer pageSize,
+                                                    @RequestParam("confid") Integer confid,
+                                                    @RequestParam(value = "searchkey", required = false) String searchkey) {
         try {
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
             if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
@@ -211,4 +231,59 @@
         }
     }
 
-}
+    @RequestMapping("/conference/getQRCode")
+    @ResponseBody
+    public void getQRCode(@RequestParam("confid") String id, HttpServletResponse httpServletResponse) throws Exception {
+        // QRCodeUtil.createQrCode(new FileOutputStream(new File("d:\\qrcode\\qrcode.jpg")),"confid="+id,800,"JPEG");
+
+        httpServletResponse.setHeader("Cache-Control", "no-store");
+        httpServletResponse.setHeader("Pragma", "no-cache");
+        httpServletResponse.setDateHeader("Expires", 0);
+        httpServletResponse.setContentType("image/jpeg");
+        ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream();
+        QRCodeUtil.createQrCode(responseOutputStream, "confid=" + id, 750, "JPEG");
+        responseOutputStream.flush();
+        responseOutputStream.close();
+
+    }
+
+    @GetMapping("/conference/loadimport")
+    public String loadimport(@RequestParam("confid") Integer confid, Model model) {
+        model.addAttribute("detailConfid", confid);
+        return "conference/import";
+    }
+
+    @PostMapping("/conference/doimport")
+    @ResponseBody
+    public JsonResult editConference(@RequestParam("confid") Integer confid,
+                                     @RequestParam(value = "file", required = false) MultipartFile file,
+                                     HttpServletRequest request) {
+        try {
+
+            String path = request.getSession().getServletContext().getRealPath("upload");
+
+            String fpath = null;
+            if (null != file) {
+                String fileName = file.getOriginalFilename();
+                File targetFile = new File(path, fileName);
+                if (!targetFile.exists()) {
+                    targetFile.mkdirs();
+                }
+                file.transferTo(targetFile);
+                fpath = path + "/" + fileName;
+            }
+
+            if (conferenceService.saveConferencePeopleByExcel(confid,fpath)) {
+                return JsonResult.ok("新增成功");
+            } else {
+                return JsonResult.error("新增失败");
+            }
+        } catch (WebCheckException e) {
+            return JsonResult.ok(599, e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java
index d18f7e7..3ed44f1 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java
@@ -16,6 +16,8 @@
 
     List<TConference> findByConfdateAndStatus(String confdate, String status);
 
+    List<TConference> findByConfdate(String confdate);
+
     @Query("from TConference where deptcode=?1 order by confid desc")
     List<TConference> findAllByDeptcodeOrderByConfdate(String deptcode);
 
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
index c04be47..16416da 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -21,6 +21,9 @@
     @Transactional(rollbackFor = Exception.class)
     boolean deleteConference(int confid) throws Exception;
 
+    @Transactional(rollbackFor = Exception.class)
+    boolean deleteConfPeople(String pid) throws Exception;
+
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     TNcDevice getBindedDevice(int confid) ;
 
@@ -38,7 +41,11 @@
 
     @Transactional(rollbackFor = Exception.class)
     boolean saveNewConference(String confname,String confdate, String conftype, String starttime,
-                              String endtime, String attendtime, TOperator oper, String filepath,Integer deviceid) throws Exception;
+                              String endtime, String attendtime, TOperator oper, Integer deviceid) throws Exception;
+
+    @Transactional(rollbackFor = Exception.class)
+    boolean saveConferencePeopleByExcel(Integer confid,String fpath) throws Exception;
+
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<TConfPeople> getConferenceDetails(String searchkey, int confid, int pageNo, int pageSize);
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
index 627afba..a09dc10 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
@@ -133,6 +133,16 @@
     }
 
     @Override
+    public boolean deleteConfPeople(String pid) throws Exception {
+        TConfPeople people=confPeopleDao.getOne(pid);
+        if(null == people){
+            throw new WebCheckException("会议人员不存在");
+        }
+        confPeopleDao.delete(people);
+        return true;
+    }
+
+    @Override
     public TNcDevice getBindedDevice(int confid) {
         TConferenceDevbind bind=conferenceDevbindDao.findByConfid(confid);
         if(null!=bind){
@@ -145,7 +155,13 @@
     @Override
     public List<TConference> getConferenceByDateAndStatus(String confdate,String status) {
 
-        List<TConference> conflist=conferenceDao.findByConfdateAndStatus(confdate,status);
+        List<TConference> conflist;
+        if(!StringUtil.isEmpty(status)){
+            conflist=conferenceDao.findByConfdateAndStatus(confdate,status);
+        }else{
+            conflist=conferenceDao.findByConfdate(confdate);
+        }
+
         if(StringUtil.isEmpty(conflist)){
             return null;
         }
@@ -177,7 +193,7 @@
     }*/
 
     @Override
-    public boolean saveNewConference(String confname,String confdate, String conftype, String starttime, String endtime,String attendtime, TOperator oper, String fpath,Integer deviceid) throws Exception {
+    public boolean saveNewConference(String confname,String confdate, String conftype, String starttime, String endtime,String attendtime, TOperator oper, Integer deviceid) throws Exception {
 
         String errdevname=checkTimeErrorDevice(attendtime,endtime,confdate,deviceid);
         if(!StringUtil.isEmpty(errdevname)){
@@ -206,10 +222,18 @@
         bind.setDeviceid(deviceid);
         conferenceDevbindDao.save(bind);
 
-        if(ConferenceConstant.CONFTYPE_NOLIST.equals(conf.getConftype())){
-            return true;
-        }
 
+
+        return true;
+
+    }
+
+    @Override
+    public boolean saveConferencePeopleByExcel(Integer confid, String fpath) throws Exception {
+        TConference conference=conferenceDao.findByConfid(confid);
+        if(null==conference){
+            throw new WebCheckException("会议不存在");
+        }
         List<String> successCardnos = new ArrayList<>(0);
         List<String> errmsgList = new ArrayList<>(0);
 
@@ -246,10 +270,9 @@
                 if (!StringUtil.isEmpty(cardno) && successCardnos.contains(cardno)) {
                     msg += ",市民卡号重复!";
                 }
-                String errconfname=checkConfTimeError(attendtime,endtime,confdate,cardno);
+                String errconfname=checkConfTimeError(conference.getAttendtime(),conference.getEndtime(),conference.getConfdate(),cardno);
                 if(!StringUtil.isEmpty(errconfname)){
-             //       throw new WebCheckException("会议与《"+ StringUtils.join(errconfname.toArray(),",")+"》存在时间冲突,请重新设置会议时间");
-                    msg += ",市民卡号[" + cardno + "]与会议:"+errconfname+"存在规则时间段冲突!";
+                    msg += ",市民卡号[" + cardno + "]在会议:"+errconfname+"中已存在!";
                 }
 
                 if (!StringUtil.isEmpty(msg)) {
@@ -259,7 +282,7 @@
                     people.setAttstatus(ConferenceConstant.ATTENDSTATUS_UNCHECK);
                     people.setCardno(cardno);
                     people.setCustid(customer.getCustid());
-                    people.setConfid(conf.getConfid());
+                    people.setConfid(conference.getConfid());
                     people.setLastsaved(DateUtil.getNow());
                     people.setCustname(name);
                     confPeopleDao.save(people); //保存明细
@@ -283,8 +306,8 @@
             }
             throw new WebCheckException(errmsg.toString());
         }
-        return true;
 
+        return true;
     }
 
     @Override
@@ -292,8 +315,8 @@
         StringBuffer querySql = new StringBuffer("from TConfPeople t where t.confid=:confid ");
         StringBuffer countSql = new StringBuffer("select count(t.pid) as cnt from TConfPeople t where t.confid=:confid ");
         if (!StringUtil.isEmpty(searchkey)) {
-            querySql.append(" and (t.cardno like :str or t.username like :str) ");
-            countSql.append(" and (t.cardno like :str or t.username like :str) ");
+            querySql.append(" and (t.cardno like :str or t.custname like :str) ");
+            countSql.append(" and (t.cardno like :str or t.custname like :str) ");
         }
         querySql.append(" order by t.cardno ");
         Query query = entityManager.createQuery(querySql.toString());
diff --git a/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java b/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
index ec63725..5c43481 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
@@ -18,13 +18,4 @@
     public static final Integer CONFDTL_STATUS_UPDATED=1;
     public static final Integer CONFDTL_STATUS_UNUPDATE=0;
 
-
-    public static void main(String[] args) {
-        String i="1100";
-        String l="1200";
-        System.out.println(DateUtil.compareDatetime(l,i,"HHmm"));
-    }
-
-
-
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/util/QRCodeUtil.java b/src/main/java/com/supwisdom/dlpay/conference/util/QRCodeUtil.java
new file mode 100644
index 0000000..950fff1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/util/QRCodeUtil.java
@@ -0,0 +1,44 @@
+package com.supwisdom.dlpay.conference.util;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Hashtable;
+
+public class QRCodeUtil {
+	
+	public static boolean createQrCode(OutputStream outputStream,
+			String content, int qrCodeSize, String imageFormat)
+			throws WriterException, IOException {
+		Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>();
+		hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // L-7%,M-15%,Q-25%,H-30%
+		QRCodeWriter qrCodeWriter = new QRCodeWriter();
+		BitMatrix byteMatrix = qrCodeWriter.encode(content,
+				BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap);
+		int matrixWidth = byteMatrix.getWidth();
+		BufferedImage image = new BufferedImage(matrixWidth - 200,
+				matrixWidth - 200, BufferedImage.TYPE_INT_RGB);
+		image.createGraphics();
+		Graphics2D graphics = (Graphics2D) image.getGraphics();
+		graphics.setColor(Color.WHITE);
+		graphics.fillRect(0, 0, matrixWidth, matrixWidth);
+		graphics.setColor(Color.BLACK);
+		for (int i = 0; i < matrixWidth; i++) {
+			for (int j = 0; j < matrixWidth; j++) {
+				if (byteMatrix.get(i, j)) {
+					graphics.fillRect(i - 100, j - 100, 1, 1);
+				}
+			}
+		}
+		return ImageIO.write(image, imageFormat, outputStream);
+	}
+}
diff --git a/src/main/java/com/supwisdom/dlpay/customer/bean/TCustomerExportBean.java b/src/main/java/com/supwisdom/dlpay/customer/bean/TCustomerExportBean.java
new file mode 100644
index 0000000..cad153b
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/customer/bean/TCustomerExportBean.java
@@ -0,0 +1,70 @@
+package com.supwisdom.dlpay.customer.bean;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class TCustomerExportBean implements Serializable {
+    @Excel(name = "客户姓名")
+    private String custname;
+    @Excel(name = "卡号")
+    private String cardno;
+    @Excel(name = "银行卡")
+    private String bankcardno;
+    @Excel(name = "物理卡号")
+    private String cardphyid;
+    @Excel(name = "部门名称")
+    private String deptname;
+    @Excel(name = "客户类型")
+    private String custtypename;
+
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname = custname;
+    }
+
+    public String getCardno() {
+        return cardno;
+    }
+
+    public void setCardno(String cardno) {
+        this.cardno = cardno;
+    }
+
+    public String getBankcardno() {
+        return bankcardno;
+    }
+
+    public void setBankcardno(String bankcardno) {
+        this.bankcardno = bankcardno;
+    }
+
+    public String getCardphyid() {
+        return cardphyid;
+    }
+
+    public void setCardphyid(String cardphyid) {
+        this.cardphyid = cardphyid;
+    }
+
+    public String getDeptname() {
+        return deptname;
+    }
+
+    public void setDeptname(String deptname) {
+        this.deptname = deptname;
+    }
+
+    public String getCusttypename() {
+        return custtypename;
+    }
+
+    public void setCusttypename(String custtypename) {
+        this.custtypename = custtypename;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java b/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
index bd11ebf..6cd7f45 100644
--- a/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
+++ b/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
@@ -1,12 +1,17 @@
 package com.supwisdom.dlpay.customer.controller;
 
 
+import cn.afterturn.easypoi.entity.vo.NormalExcelConstants;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
+import cn.afterturn.easypoi.view.PoiBaseView;
 import com.google.gson.Gson;
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.api.bean.QueryUserParam;
 import com.supwisdom.dlpay.api.bean.UserInforResponse;
 import com.supwisdom.dlpay.customer.bean.CustomerSaveBean;
 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
+import com.supwisdom.dlpay.customer.bean.TCustomerExportBean;
 import com.supwisdom.dlpay.doorlist.bean.CustomerListBean;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.domain.TOperator;
@@ -14,8 +19,10 @@
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.mainservice.bean.TDoordtlInfo;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
 import com.supwisdom.dlpay.paysdk.proxy.UserProxy;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
 import com.supwisdom.dlpay.system.domain.TCustType;
 import com.supwisdom.dlpay.system.domain.TDept;
 import com.supwisdom.dlpay.system.service.SystemService;
@@ -25,7 +32,12 @@
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Controller
 @RequestMapping("/customer")
@@ -42,7 +54,7 @@
     @RequestMapping("/index")
     public String indexView(ModelMap model) {
         List<TCustType> lst = systemService.findAllCusttype();
-        List<TDept> dept=systemService.findAllDept();
+        List<TDept> dept = systemService.findAllDept();
         Gson gson = new Gson();
         String deptString = gson.toJson(dept);
         model.put("deptlist", deptString);
@@ -56,21 +68,23 @@
     @ResponseBody
     public PageResult<TCustomerInfo> getDataList(@RequestParam("page") Integer pageNo,
                                                  @RequestParam("limit") Integer pageSize,
-                                                 @RequestParam(value = "searchkey", required = false) String searchKey,
+                                                 @RequestParam(value = "custname", required = false) String custname,
+                                     //            @RequestParam(value = "deptcode", required = false) String deptcode,
                                                  @AuthenticationPrincipal TOperator operUser) {
         try {
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
             if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
             CustomerSearchBean searchBean = new CustomerSearchBean();
             searchBean.setPageNo(pageNo);
-            searchBean.setCustname(searchKey);
+            searchBean.setCustname(custname);
             searchBean.setPageSize(pageSize);
-            String deptcode=operUser.getDeptcode();
-            if(!StringUtil.isEmpty(deptcode)){
-                searchBean.setDeptcode(deptcode);
+            String deptcode="";
+            if (StringUtil.isEmpty(deptcode)&&!"S".equals(operUser.getOpertype())) {
+                deptcode = operUser.getDeptcode();
             }
+            searchBean.setDeptcode(deptcode);
 
-            PageResult<TCustomerInfo> bean= webInterfaceService.getCustomerInfoPage(searchBean);
+            PageResult<TCustomerInfo> bean = webInterfaceService.getCustomerInfoPage(searchBean);
 
             return bean;
         } catch (Exception e) {
@@ -82,10 +96,10 @@
 
     @GetMapping("/loadadd")
     public String loadadd(Model model) {
-        List<TCustType> list=systemService.findAllCusttype();
-        model.addAttribute("typelist",list);
-        List<TDept> deptlist=systemService.findAllDept();
-        model.addAttribute("deptlist",deptlist);
+        List<TCustType> list = systemService.findAllCusttype();
+        model.addAttribute("typelist", list);
+        List<TDept> deptlist = systemService.findAllDept();
+        model.addAttribute("deptlist", deptlist);
 
         return "doorlist/customer/form";
     }
@@ -95,15 +109,15 @@
     public JsonResult add(@RequestBody CustomerListBean customer,
                           @AuthenticationPrincipal TOperator operUser) {
         if (customer != null) {
-            String operid=operUser.getOperid();
+            String operid = operUser.getOperid();
             String now = DateUtil.getNow();
             QueryUserParam queryUserParam = new QueryUserParam();
             queryUserParam.setCitizencardno(customer.getCardno());
             UserInforResponse response = userProxy.querybycardno(queryUserParam);
             if (response.getRetcode() != 0) {
-                return JsonResult.error("核心平台验证人员失败:"+response.getRetmsg());
+                return JsonResult.error("核心平台验证人员失败:" + response.getRetmsg());
             }
-            webInterfaceService.doSaveCustomerAndCard(operid,now,customer,response);
+            webInterfaceService.doSaveCustomerAndCard(operid, now, customer, response);
             return JsonResult.ok();
         } else {
             return JsonResult.error("添加失败");
@@ -112,14 +126,57 @@
 
     @PostMapping("/delete")
     @ResponseBody
-    public JsonResult delete(@RequestParam String  custid) {
-        boolean flag=webInterfaceService.deleteCustomer(custid);
-        if(flag){
+    public JsonResult delete(@RequestParam String custid) {
+        boolean flag = webInterfaceService.deleteCustomer(custid);
+        if (flag) {
             return JsonResult.ok();
         }
         return JsonResult.error("删除失败");
     }
 
 
+    @GetMapping("/depttree")
+    @ResponseBody
+    public List<TreeSelectNode> searchDeptTree() {
+        List<TreeSelectNode> tree = systemService.getDeptSelectTree();
+        return tree;
+    }
 
+    @ResponseBody
+    @RequestMapping(value = "/exportexcel")
+    public void exportexcel(HttpServletRequest request, HttpServletResponse response,
+                            @RequestParam(value = "custname", required = false, defaultValue = "all") String custname,
+                            @AuthenticationPrincipal TOperator operUser) {
+
+        Map map = new HashMap();
+        try {
+            /**
+             * 1. 查询数据
+             */
+            // final int max_field = 9;
+            // 保存表字段
+            List<TCustomerExportBean> bean = null;
+            String deptcode="";
+            if(!"S".equals(operUser.getOpertype())){
+                deptcode=operUser.getDeptcode();
+            }
+            bean=webInterfaceService.getCustomerExportBean(custname,deptcode);
+
+            /**
+             * 2.设置表格属性: title:标题  sheetName:工作簿名 type:表格类型
+             */
+            ExportParams params = new ExportParams("人员表", "人员", ExcelType.XSSF);
+//		params.setFreezeCol(2);
+            map.put(NormalExcelConstants.DATA_LIST, bean);//设置值
+            map.put(NormalExcelConstants.PARAMS, params);//设置属性
+            map.put(NormalExcelConstants.CLASS, TCustomerExportBean.class);
+            map.put(NormalExcelConstants.FILE_NAME, "设备流水名单");
+            PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("result", "导出excel文件失败");
+        }
+
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java
index 1fe805b..e6e5001 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/CustomerDao.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.mainservice.dao;

 

 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;

+import com.supwisdom.dlpay.customer.bean.TCustomerExportBean;

 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;

 import com.supwisdom.dlpay.framework.util.PageResult;

 import com.supwisdom.dlpay.mainservice.domain.TCustomer;

@@ -22,4 +23,6 @@
     public PageResult<TCustomerInfo> getCustomerInfoPage(CustomerSearchBean param);

 

     boolean deleteCustomer(String custid);

+

+    List<TCustomerExportBean> getCustomerExportList(String custname,String deptcode);

 }

diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
index aab4496..d9af3d7 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.mainservice.dao.impl;

 

 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;

+import com.supwisdom.dlpay.customer.bean.TCustomerExportBean;

 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;

 import com.supwisdom.dlpay.framework.util.PageResult;

 import com.supwisdom.dlpay.framework.util.StringUtil;

@@ -100,15 +101,7 @@
 

         List<String> childdplist=null;

         String deptcode=param.getDeptcode();

-        if (!StringUtil.isEmpty(deptcode)&&!"0".equals(deptcode)) {

-            Query chirdGroupQuery = entityManager.createNativeQuery("WITH RECURSIVE r AS(" +

-                    "SELECT * FROM tb_dept WHERE deptcode =:deptcode " +

-                    "union ALL " +

-                    "SELECT t.* FROM tb_dept t, r WHERE t.fdeptcode = r.deptcode) " +

-                    "select deptcode from r order by deptno");

-            chirdGroupQuery.setParameter("deptcode", deptcode);

-            childdplist = chirdGroupQuery.getResultList(); //递归查询所有的子节点

-        }

+        childdplist = getChildDeptlist(childdplist, deptcode);

 

         String perName=param.getCustname();

         String sql = "select a.custid,a.custname,a.deptcode,a.custtypeid,b.cardno,b.bankcardno,b.cardphyid,b.expiredate from T_Customer a left join t_card b on a.custid = b.custid " +

@@ -144,6 +137,19 @@
         return new PageResult<>(count.longValue(), list);

     }

 

+    private List<String> getChildDeptlist(List<String> childdplist, String deptcode) {

+        if (!StringUtil.isEmpty(deptcode)&&!"0".equals(deptcode)) {

+            Query chirdGroupQuery = entityManager.createNativeQuery("WITH RECURSIVE r AS(" +

+                    "SELECT * FROM tb_dept WHERE deptcode =:deptcode " +

+                    "union ALL " +

+                    "SELECT t.* FROM tb_dept t, r WHERE t.fdeptcode = r.deptcode) " +

+                    "select deptcode from r order by deptno");

+            chirdGroupQuery.setParameter("deptcode", deptcode);

+            childdplist = chirdGroupQuery.getResultList(); //递归查询所有的子节点

+        }

+        return childdplist;

+    }

+

     @Transactional

     @Override

     public TCustomerInfo getTCustomerByExcel(String cardno) {

@@ -173,4 +179,30 @@
         }

         return flag;

     }

+

+    @Override

+    public List<TCustomerExportBean> getCustomerExportList(String custname,String deptcode) {

+        List<String> childdplist=null;

+        childdplist = getChildDeptlist(childdplist, deptcode);

+        String sql = "select a.custname,a.deptname,a.custtypename,b.cardno,b.bankcardno,b.cardphyid from T_Customer a left join t_card b on a.custid = b.custid " +

+                " where a.status='1' and b.status='normal' and b.transtatus='normal' ";

+

+        if (!StringUtil.isEmpty(custname)){

+            sql += " and a.custname like :perName ";

+        }

+        if (!StringUtil.isEmpty(childdplist)) {

+            sql+=" and a.deptcode in ('"+ StringUtils.join(childdplist.toArray(),"','")+"') ";

+

+        }

+        sql +=" order by b.cardno desc ";

+

+        Query query = entityManager.createNativeQuery(sql);

+        if (!StringUtil.isEmpty(custname)){

+            query.setParameter("perName", "%"+custname+"%");

+        }

+

+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TCustomerExportBean.class));

+        List<TCustomerExportBean> list = query.getResultList();

+        return list;

+    }

 }

diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
index 1dc753c..ca2da77 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
@@ -2,6 +2,7 @@
 

 import com.supwisdom.dlpay.api.bean.UserInforResponse;

 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;

+import com.supwisdom.dlpay.customer.bean.TCustomerExportBean;

 import com.supwisdom.dlpay.doorlist.bean.CustomerListBean;

 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;

 import com.supwisdom.dlpay.framework.util.PageResult;

@@ -146,6 +147,8 @@
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})

     PageResult<TCustomerInfo> getCustomerInfoPage(CustomerSearchBean bean);

 

+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})

+    List<TCustomerExportBean> getCustomerExportBean(String custname,String deptcode);

 

 

-    }

+}

diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
index 76e3775..469cd16 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
@@ -2,6 +2,7 @@
 

 import com.supwisdom.dlpay.api.bean.UserInforResponse;

 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;

+import com.supwisdom.dlpay.customer.bean.TCustomerExportBean;

 import com.supwisdom.dlpay.doorlist.bean.CustomerListBean;

 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;

 import com.supwisdom.dlpay.framework.util.PageResult;

@@ -246,4 +247,9 @@
     public PageResult<TCustomerInfo> getCustomerInfoPage(CustomerSearchBean bean){

         return customerDao.getCustomerInfoPage(bean);

     }

+

+    @Override

+    public List<TCustomerExportBean> getCustomerExportBean(String custname, String deptcode) {

+        return customerDao.getCustomerExportList(custname,deptcode);

+    }

 }

diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/DeptDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/DeptDao.java
index 9c99e27..a113305 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/DeptDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/DeptDao.java
@@ -16,10 +16,14 @@
   @Query("from TDept t where t.status='normal' ")
   List<TDept> findNormalDept();
 
-  Page<TDept> findAllByDeptnameContainingOrDeptnoContaining(String name,String deptno, Pageable pageable);
+  @Query("from TDept t order by deptcode")
+  List<TDept> findAllOrderByDeptcode();
+
+  Page<TDept> findAllByDeptnameContainingOrDeptnoContainingOrderByDeptcode(String name,String deptno, Pageable pageable);
 
   @Query("select count(t.deptno) from TDept t where t.deptno=?1 ")
   long checkDeptnoExists(String deptno);
 
   List<TDept> findByDeptno(String deptno);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
index 4d0dfe1..12a2bba 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
@@ -4,10 +4,7 @@
 import com.supwisdom.dlpay.api.bean.JsonResult;

 import com.supwisdom.dlpay.framework.util.PageResult;

 import com.supwisdom.dlpay.ncmgr.domain.TBuilding;

-import com.supwisdom.dlpay.system.bean.AllotBuildingBean;

-import com.supwisdom.dlpay.system.bean.CustTypeSearchBean;

-import com.supwisdom.dlpay.system.bean.DeptSearchBean;

-import com.supwisdom.dlpay.system.bean.RegionZTreeNodes;

+import com.supwisdom.dlpay.system.bean.*;

 import com.supwisdom.dlpay.system.domain.*;

 import com.supwisdom.dlpay.system.page.Pagination;

 import org.springframework.transaction.annotation.Propagation;

@@ -243,4 +240,8 @@
 

     @Transactional(rollbackFor = Exception.class, readOnly = true)

     TDept getDeptByDeptno(String deptno);

+

+    @Transactional(rollbackFor = Exception.class, readOnly = true)

+    List<TreeSelectNode> getDeptSelectTree();

+

 }

diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
index 369a23f..166403e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
@@ -5,10 +5,7 @@
 import com.supwisdom.dlpay.framework.util.PageResult;

 import com.supwisdom.dlpay.framework.util.StringUtil;

 import com.supwisdom.dlpay.ncmgr.domain.TBuilding;

-import com.supwisdom.dlpay.system.bean.AllotBuildingBean;

-import com.supwisdom.dlpay.system.bean.CustTypeSearchBean;

-import com.supwisdom.dlpay.system.bean.DeptSearchBean;

-import com.supwisdom.dlpay.system.bean.RegionZTreeNodes;

+import com.supwisdom.dlpay.system.bean.*;

 import com.supwisdom.dlpay.system.dao.*;

 import com.supwisdom.dlpay.system.domain.*;

 import com.supwisdom.dlpay.system.page.Pagination;

@@ -341,7 +338,7 @@
         Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()

                 , Sort.by("deptno"));

         if (!StringUtil.isEmpty(param.getSearchkey())) {

-            return new PageResult<>(deptDao.findAllByDeptnameContainingOrDeptnoContaining(param.getSearchkey(), param.getSearchkey(), pageable));

+            return new PageResult<>(deptDao.findAllByDeptnameContainingOrDeptnoContainingOrderByDeptcode(param.getSearchkey(), param.getSearchkey(), pageable));

         }

 

         return new PageResult<>(deptDao.findAll(pageable));

@@ -349,7 +346,7 @@
 

     @Override

     public List<TDept> findAllDept() {

-        return deptDao.findAll();

+        return deptDao.findAllOrderByDeptcode();

     }

 

     @Override

@@ -383,4 +380,32 @@
         List<TDept> dept=deptDao.findByDeptno(deptno);

         return dept.size()>0?dept.get(0):null;

     }

+

+    public List<TreeSelectNode> getDeptSelectTree() {

+        List<TDept> groupList = deptDao.findAll();

+        if (StringUtil.isEmpty(groupList)) return new ArrayList<>(0);

+        return getDeptTree(groupList, "-1");

+    }

+

+    private List<TreeSelectNode> getDeptTree(List<TDept> groupList, String pid) {

+        List<TreeSelectNode> result = new ArrayList<>(0);

+        for (TDept gp : groupList) {

+            if (("-1".equals(pid) && "-1".equals(gp.getFdeptcode())) || (null != pid && pid.equals(gp.getFdeptcode()))) {

+                TreeSelectNode node = new TreeSelectNode();

+                node.setId(gp.getDeptcode());

+                node.setName(gp.getDeptname());

+                node.setOpen(true);

+              //  node.setGrouptype(gp.getGrouptype());

+                node.setChecked(false);

+                List<TreeSelectNode> children = getDeptTree(groupList, gp.getDeptcode());

+                if (!StringUtil.isEmpty(children)) {

+                    node.setChildren(children);

+                } else {

+                    node.setChildren(null);

+                }

+                result.add(node);

+            }

+        }

+        return result;

+    }

 }

diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 0a1404a..cfd7f4c 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -123,6 +123,7 @@
                         .antMatcher("/api/**")
                         .authorizeRequests()
                         .antMatchers("/api/auth/**").permitAll()
+                        .antMatchers("/api/conference/**").permitAll()
                         .antMatchers("/api/notify/**").permitAll()
                         .antMatchers("/api/common/**").hasAnyRole("THIRD_COMMON", "THIRD_ADMIN")
                         .antMatchers("/api/consume/**").hasRole("THIRD_CONSUME")
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 7962596..4740cba 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -196,3 +196,15 @@
 INSERT INTO tb_systemparam(param_key,param_value,param_desc,param_flag) VALUES ('IMPCUSTOME_FIRST_TIME','','第一次名单导入时间','1');

 INSERT INTO tb_systemparam(param_key,param_value,param_desc,param_flag) VALUES ('PAYAPI_APPID','300003','登录核心平台appid','1');

 INSERT INTO tb_systemparam(param_key,param_value,param_desc,param_flag) VALUES ('PAYAPI_SECRET','b32309b244904e1789b055eb1da51db1','登录核心平台secret','1');

+

+

+

+INSERT INTO "t_dictionary"("dicttype", "dicttypename", "dictval", "dictcaption") VALUES (8, '设备类型', 'H', '会议平板');

+INSERT INTO "t_dictionary"("dicttype", "dicttypename", "dictval", "dictcaption") VALUES (16, '设备使用类别', 'HY', '会议签到');

+

+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (29, NULL, 0, NULL, 'layui-icon-app', '#', '会议签到', 8, -1, NULL);

+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (31, NULL, 1, NULL, '', '/system/custtypeindex', '客户类别管理', 9, 3, NULL);

+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (32, NULL, 1, NULL, '', '/system/deptindex', '部门管理', 10, 3, NULL);

+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (33, NULL, 1, NULL, '', '/customer/index', '客户管理', 2, 21, NULL);

+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (35, NULL, 1, NULL, '', '/conference/index', '会议管理', 1, 29, NULL);

+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (39, NULL, 1, NULL, '', '/confpeople/index', '会议人员查询', 2, 29, NULL);
\ No newline at end of file
diff --git a/src/main/resources/templates/conference/confdetail.html b/src/main/resources/templates/conference/confdetail.html
index fc7afc2..8a606ff 100644
--- a/src/main/resources/templates/conference/confdetail.html
+++ b/src/main/resources/templates/conference/confdetail.html
@@ -6,12 +6,19 @@
         </div>
         <div class="layui-form toolbar">
             搜索:
-            <input type="hidden" id="search-conference-detail-confid" th:value="${detailConfid}" />
-            <input id="search-conference-detail-searchkey" class="layui-input search-input" maxlength="20" type="text" style="width: 200px;"
+            <input type="hidden" id="search-conference-detail-confid" th:value="${detailConfid}"/>
+            <input id="search-conference-detail-searchkey" class="layui-input search-input" maxlength="20" type="text"
+                   style="width: 200px;"
                    placeholder="输入市民卡号或姓名查询"/>&emsp;
             <button id="btn-search-conference-detail" class="layui-btn icon-btn" data-type="search"><i
                     class="layui-icon">&#xe615;</i>搜索
             </button>
+            <!--<div class="layui" style="width:100px;height:100px;display: inline-block;">
+                <a href="" download="qrcode" id="qrcodeDownload">
+                    <img border="0" src="" id="qrcode" style="width:100%;height:auto;">
+                </a>
+            </div>-->
+
         </div>
         <table class="layui-table" id="conferenceDetailTable" lay-filter="conferenceDetailTable-filter"></table>
     </div>
@@ -19,11 +26,24 @@
 <script>
 
     layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
-        var form = layui.form;
         var table = layui.table;
-        var admin = layui.admin;
-        var element = layui.element;
+        let admin = layui.admin;
+        var token = $("meta[name='_csrf_token']").attr("value");
+        var confid = $("#search-conference-detail-confid").val();
 
+       /* var url = '[[@{/conference/getQRCode}]]?confid=' + confid;
+        $.ajax({
+            url: url,
+            type: 'get',
+            headers: {
+                'Accept': 'application/json',
+                'X-CSRF-TOKEN': token,
+            },
+            success: function (result) {
+            }
+        })
+        $("#qrcode").attr("src", url);
+        $("#qrcodeDownload").attr("href", url);*/
 
         // 渲染表格
         var renderDetailTable = function (obj) {
@@ -36,12 +56,22 @@
                 cols: [
                     [
                         {field: 'cardno', title: '市民卡号', align: 'center'},
-                        {field: 'custname', title: '姓名', align: 'center'}
+                        {field: 'custname', title: '姓名', align: 'center'},
+                        {
+                            field: 'custid',
+                            align: 'center',
+                            width: 160,
+                            title: '操作',
+                            fixed: 'right',
+                            templet: function (item) {
+                                return ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="cp-del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
+                            }
+                        }
                     ]
                 ]
             });
         }
-        renderDetailTable({confid: $("#search-conference-detail-confid").val()});
+        renderDetailTable({confid: confid});
 
         // 搜索按钮点击事件
         $('#btn-search-conference-detail').click(function () {
@@ -50,5 +80,42 @@
             table.reload('conferenceDetailTable', {where: {confid: confid, searchkey: searchkey}, page: {curr: 1}});
         });
 
+        table.on('tool(conferenceDetailTable-filter)', function (obj) {
+            let data = obj.data;
+            let layEvent = obj.event;
+            if (layEvent === 'cp-del') {
+                showDelete(data);
+            }
+        });
+        let showDelete = function (data) {
+            layer.confirm('确定要删除吗?', function (i) {
+                layer.close(i);
+                layer.load(2);
+                let token = $("meta[name='_csrf_token']").attr("value");
+                admin.go('[[@{/conference/deleteconfpeople}]]', {
+                     pid: data.pid,
+                    _csrf: token
+                }, function (data) {
+                    console.log(data.code);
+                    layer.closeAll('loading');
+                    if (data.code == 200) {
+                        layer.msg(data.msg, {icon: 1});
+                    } else if (data.code == 401) {
+                        layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else {
+                        layer.msg(data.msg, {icon: 2});
+                    }
+                    table.reload('conferenceDetailTable', {});
+                }, function (ret) {
+                    console.log(ret);
+                    layer.closeAll('loading');
+                    layer.msg('请求失败了,请稍后再试', {icon: 2});
+                });
+            });
+        }
+
     });
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/conference/confform.html b/src/main/resources/templates/conference/confform.html
index 2a9b697..4b404db 100644
--- a/src/main/resources/templates/conference/confform.html
+++ b/src/main/resources/templates/conference/confform.html
@@ -4,9 +4,9 @@
         <label class="confinput-label layui-form-label confinput-label">会议类型</label>
         <div class="layui-input-block">
             <input type="radio" name="conftype" id="form-conference-conftype-list"
-                   lay-filter="conference-conftype-filter" value="list" title="有名单" checked/>
+                   lay-filter="conference-conftype-filter" value="list" title="名单会议" checked/>
             <input type="radio" name="conftype" id="form-conference-conftype-nolist"
-                   lay-filter="conference-conftype-filter" value="nolist" title="无名单"/>
+                   lay-filter="conference-conftype-filter" value="nolist" title="临时会议"/>
 
         </div>
     </div>
@@ -20,7 +20,7 @@
         </div>
     </div>
     <div class="layui-form-item">
-        <label class="confinput-label layui-form-label"><span style="color: red">* </span>会议名称</label>
+        <label class="confinput-label layui-form-label"><span style="color: red">* </span>会议日期</label>
         <div class="layui-input-inline">
             <input type="text" name="confdate" id="form-conference-confdate" placeholder="会议日期" th:value="${maxdate}"
                    autocomplete="off" class="layui-input"/>
@@ -60,7 +60,7 @@
          </div>
     </div>
 
-    <div class="layui-form-item" id="conference-conflist">
+<!--    <div class="layui-form-item" id="conference-conflist">
         <label class="confinput-label layui-form-label"><span style="color: red">* </span>会议人员</label>
 
         <div class="layui-input-inline" style="width: auto;">
@@ -73,7 +73,7 @@
             <a th:href="@{/conference/downloadexcel}"
                style="color: blue;text-decoration: none;cursor: pointer;">下载名单模板</a>
         </div>
-    </div>
+    </div>-->
 
     <div class="layui-form-item model-form-footer">
         <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
@@ -119,18 +119,18 @@
 
         form.render("radio");
 
-        form.on('radio(conference-conftype-filter)', function (data) {
+       /* form.on('radio(conference-conftype-filter)', function (data) {
             changeDiscountRuletype(data.value);
             confType = data.value;
-        });
+        });*/
 
-        var changeDiscountRuletype = function (val) {
+     /*   var changeDiscountRuletype = function (val) {
             if ('nolist' == val) {
                 $("#conference-conflist").hide();
             } else {
                 $("#conference-conflist").show();
             }
-        }
+        }*/
 
         form.on('submit(conference-form-submit)', function (data) {
             var token = $("meta[name='_csrf_token']").attr("value");
@@ -156,7 +156,7 @@
             formData.append("attendtime", vdata.attendtime);
             formData.append("confdate",vdata.confdate);
             formData.append("deviceid",vdata.deviceid);
-            var flag=false;
+          /*  var flag=false;
             var files = $('#form-conference-records').prop('files');
             for (var i = 0; i < files.length; i++) {
                 var filename = files[i].name;
@@ -171,7 +171,7 @@
             if (!flag&&"list"==vdata.conftype) {
                 layer.msg("请选择名单", {icon: 2, time: 1500});
                 return;
-            }
+            }*/
 
             layer.load(2);
             $.ajax({
diff --git a/src/main/resources/templates/conference/conflist.html b/src/main/resources/templates/conference/conflist.html
index 71a4011..b0c951f 100644
--- a/src/main/resources/templates/conference/conflist.html
+++ b/src/main/resources/templates/conference/conflist.html
@@ -11,8 +11,8 @@
             搜索:
             <select id="search-conference-conftype">
                 <option value=""> 选择会议类型</option>
-                <option value="list"> 有名单</option>
-                <option value="nolist"> 无名单</option>
+                <option value="list"> 名单会议</option>
+                <option value="nolist"> 临时会议</option>
             </select>&emsp;
             <input id="search-conference-confname" class="layui-input search-input" maxlength="20" type="text"
                    placeholder="输入名称查询"/>&emsp;
@@ -32,12 +32,15 @@
 
     {{# if(d.status=='unstart'&&d.conftype=='list'){ }}
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="people">分配人员</a>
     <a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">查看明细</a>
     {{# } else if(d.status=='unstart'&&d.conftype=='nolist'){ }}
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
     {{# } else if(d.status!='unstart'&&d.conftype=='list'){ }}
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="people">分配人员</a>
     <a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">查看明细</a>
     {{# } }}
+
 </script>
 
 <script>
@@ -67,9 +70,9 @@
                         sort: true,
                         templet: function (d) {
                             if ('list' == d.conftype) {
-                                return '有名单';
+                                return '名单会议';
                             } else if ('nolist' == d.conftype) {
-                                return '无名单';
+                                return '临时会议';
                             } else {
                                 return d.conftype;
                             }
@@ -117,7 +120,6 @@
         //监听单元格
         table.on('tool(conferenceTable-filter)', function (obj) {
             var data = obj.data;
-            console.log(data);
             if ('del' == obj.event) {
                 layer.confirm('确定直接删除会议【' + data.confname + '】吗?', {
                     btn: ['确定', '取消']
@@ -128,7 +130,6 @@
                         _csrf:token,
                         id: data.confid
                     }, function (data) {
-                        console.log(data.code);
                         layer.closeAll('loading');
                         if (data.code == 200) {
                             layer.msg(data.msg, {icon: 1});
@@ -182,7 +183,16 @@
                         table.reload('conferenceTable');
                     }
                 });
+            }else if ('people' == obj.event) {
+                admin.popupCenter({
+                    title: "分配人员",
+                    path: '[[@{/conference/loadimport}]]?confid=' + data.confid,
+                    finish: function () {
+                        table.reload('conferenceTable');
+                    }
+                });
             }
+
         });
 
     });
diff --git a/src/main/resources/templates/conference/import.html b/src/main/resources/templates/conference/import.html
new file mode 100644
index 0000000..80d1da7
--- /dev/null
+++ b/src/main/resources/templates/conference/import.html
@@ -0,0 +1,94 @@
+<div style="color: #0c91e5" align="right">
+    <a th:href="@{/conference/downloadexcel}" class="layui-btn layui-btn-primary" style="margin: 5px">点击此处下载导入模板</a>
+</div>
+<form lay-filter="form" class="layui-form model-form" >
+    <!-- row -->
+    <input type="hidden" id="search-conference-detail-confid" th:value="${detailConfid}" />
+    <div class="layui-form-item">
+        <label class="control-label">请选择导入文件<span style="color: red"> * </span></label>
+        <input type="file" name="file" id="conference-file" placeholder="请选择xls格式文件">
+    </div>
+
+    <!-- /row -->
+    <!-- row -->
+    <div class="layui-form-item" align="center">
+        <div id="conference-importError" style="color:red">
+        </div>
+        <div id="conference-importInfo" >
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">关闭</button>
+        <button class="layui-btn" lay-filter="conference-form-import" lay-submit id="importbtn">保存</button>
+    </div>
+</form>
+
+<script>
+
+    layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        console.log(123);
+
+        form.on('submit(conference-form-import)', function (data) {
+            $("#conference-importError").html("");
+            var files = $('#conference-file').prop('files');
+            var formData = new FormData();
+            for (var i = 0; i < files.length; i++) {
+                var filename = files[i].name;
+                var suffix = filename.substr(filename.lastIndexOf("."));
+                if ('.xls' != suffix && '.xlsx' != suffix) {
+                    layer.msg("请选择excel文件", {icon: 2, time: 1500});
+                    return;
+                }
+                formData.append('file', files[i]);
+            }
+            var confid=$('#search-conference-detail-confid').val();
+            formData.append("confid",confid);
+            layer.load(2);
+            let token = $("meta[name='_csrf_token']").attr("value");
+            $.ajax({
+                type: "POST",
+                url: '[[@{/conference/doimport}]]',
+                dataType: 'json',
+                processData: false,
+                contentType: false,
+                data: formData,
+                headers: {
+                    'Accept': 'application/json',
+                    'X-CSRF-TOKEN': token,
+                },
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1, time: 1500});
+                        admin.finishPopupCenter();
+                    } else if (result.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else if (result.code == 599) {
+                        //自定义错误
+                        layer.open({
+                            type: 0,
+                            title: "错误信息",
+                            icon: 2,
+                            area: ['600px', '400px'],
+                            content: result.msg
+                        });
+
+                    } else {
+                        layer.msg(result.msg, {icon: 2, time: 1500});
+                    }
+                },
+                error: function (err) {
+                    admin.errorBack(err);
+                }
+            });
+            return false;
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/doorlist/customer/index.html b/src/main/resources/templates/doorlist/customer/index.html
index e70b2d0..f197ea3 100644
--- a/src/main/resources/templates/doorlist/customer/index.html
+++ b/src/main/resources/templates/doorlist/customer/index.html
@@ -9,12 +9,15 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索:
-            <input id="customer-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>&emsp;
+            <input id="customer-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>
+           <!-- <input id="search-customer-deptcode" type="text"
+                   lay-filter="search-customer-deptcode-filter" autocomplete="off"
+                   class="layui-input search-input"/>-->
             <button id="customer-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
             <button id="customer-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加人员</button>
            <!-- <button id="customer-btn-import" class="layui-btn icon-btn" ><i class="layui-icon"></i>批量导入</button>-->
-          <!--  <a id="customer-btn-export" href="javascript:void(0);" class="layui-btn layui-btn-primary" >导出</a>-->
+            <!--<a id="customer-btn-export" href="javascript:void(0);" class="layui-btn layui-btn-primary" >导出</a>-->
         </div>
         <table class="layui-table" id="customer-table" lay-filter="customer-table"></table>
     </div>
@@ -27,13 +30,38 @@
     var custtypelist=JSON.parse(ctlist);
     var dplist=$("#deptlist").val();
     var deptlist=JSON.parse(dplist);
-    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+    layui.use(['form', 'table', 'layer', 'admin', 'element','treeSelect'], function () {
         let form = layui.form;
         let table = layui.table;
         let admin = layui.admin;
+     //   var treeSelect = layui.treeSelect;
+        var $ = layui.$;
 
-        form.render('select');
-
+        form.render("select");
+       /* treeSelect.render({
+            elem: '#search-customer-deptcode',
+            data: '[[@{/customer/depttree}]]',
+            type: 'get',
+            placeholder: '选择部门',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                console.log(treeNode);
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+            }
+        });*/
         // 渲染表格
         table.render({
             elem: '#customer-table',
@@ -93,6 +121,17 @@
                 ]
             ]
         });
+
+        $('#customer-btn-export').click(function () {
+            let key = $('#customer-search-value').val().trim();
+
+            var url = '[[@{/customer/export?}]]'+ "custname=" + key;
+            /* $("#form").attr("action",url);
+             $("#form").submit();*/
+            $("#customer-btn-export").attr("href", url );
+            $("#customer-btn-export")[0].click();
+        });
+
         $('#customer-btn-export').click(function () {
             var url = '[[@{/customer/export}]]';
             /* $("#form").attr("action",url);
@@ -105,7 +144,9 @@
         // 搜索按钮点击事件
         $('#customer-btn-search').click(function () {
             let key = $('#customer-search-value').val().trim();
-            table.reload('customer-table', {where: {searchkey: key}, page: {curr: 1}});
+          //  let deptcode=$('#customer-deptcode').val();
+
+            table.reload('customer-table', {where: {custname: key}, page: {curr: 1}});
         });
         $('#customer-btn-add').click(function () {
             showModel();
diff --git a/src/main/resources/templates/system/dept/form.html b/src/main/resources/templates/system/dept/form.html
index 2f89041..dba67f5 100644
--- a/src/main/resources/templates/system/dept/form.html
+++ b/src/main/resources/templates/system/dept/form.html
@@ -22,7 +22,7 @@
         <label class="layui-form-label">父区域</label>
         <div class="layui-input-block">
             <select name="fdeptcode" id="fdeptcode" lay-verify="required">
-                <option value="0">根部门</option>
+             <!--   <option value="0">根部门</option>-->
                 <option th:each="dept : ${deptlist}" th:value="${dept.deptcode}">[[${dept.deptname}]]</option>
             </select>
         </div>
diff --git a/src/main/resources/templates/system/dept/index.html b/src/main/resources/templates/system/dept/index.html
index a5bab59..152439e 100644
--- a/src/main/resources/templates/system/dept/index.html
+++ b/src/main/resources/templates/system/dept/index.html
@@ -98,6 +98,10 @@
             }
         });
         let showDelete = function (data) {
+            if('0'==data.deptcode){
+                layer.msg('根目录无法删除!', {icon: 2, time: 1500});
+                return;
+            }
             layer.confirm('确定要删除吗?', function (i) {
                 layer.close(i);
                 layer.load(2);