食堂报表,部门
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/XssHttpServletRequestWrapper.java b/src/main/java/com/supwisdom/dlpay/framework/filter/XssHttpServletRequestWrapper.java
index ddc4d15..a7db678 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/XssHttpServletRequestWrapper.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/XssHttpServletRequestWrapper.java
@@ -111,6 +111,7 @@
     value = value.replaceAll("eval\\((.*)\\)", "");
     value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
     value = value.replaceAll("script", "");
+    value = value.replaceAll(" ", "");
     value = cleanSqlKeyWords(value);
     return value;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerExportBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerExportBean.java
index adcdd79..e2f504c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerExportBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerExportBean.java
@@ -7,6 +7,7 @@
     private String phone;
     private String cardno;
     private String bankcardno;
+    private String deptcode;
 
     public String getCustname() {
         return custname;
@@ -39,4 +40,12 @@
     public void setBankcardno(String bankcardno) {
         this.bankcardno = bankcardno;
     }
+
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java
index d4d4f97..3184dc7 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java
@@ -18,6 +18,7 @@
     private String bankcardno;
     private String checkstatus;
     private Integer savecardflag;
+    private String deptcode;
 
     public String getCustid() {
         return custid;
@@ -140,6 +141,14 @@
         this.checkstatus = checkstatus;
     }
 
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
     @Override
     public String toString() {
         return "CustomerSaveBean{" +
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSearchBean.java
index 06986ef..2863a53 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSearchBean.java
@@ -5,7 +5,8 @@
 public class CustomerSearchBean extends PageBean {
     private String custname;
     private String checkstatus;
-
+    private String deptcode;
+    private Integer custtypeid;
     public String getCustname() {
         return custname;
     }
@@ -21,4 +22,20 @@
     public void setCheckstatus(String checkstatus) {
         this.checkstatus = checkstatus;
     }
+
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
+    public Integer getCusttypeid() {
+        return custtypeid;
+    }
+
+    public void setCusttypeid(Integer custtypeid) {
+        this.custtypeid = custtypeid;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerShowBean.java
index 74b5e99..9fb2eab 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerShowBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerShowBean.java
@@ -14,20 +14,11 @@
     private String checkstatus;
     private String status;
     private String inputdate;
+    private String deptcode;
+    private String deptname;
+    private String custtypename;
+    private Integer discnt;
 
-    public CustomerShowBean(){
-
-    }
-
-    public CustomerShowBean(String custid, Integer custtype, String custname, String phone, String cardno, String cardphyid, String bankcardno) {
-        this.custid = custid;
-        this.custtype = custtype;
-        this.custname = custname;
-        this.phone = phone;
-        this.cardno = cardno;
-        this.cardphyid = cardphyid;
-        this.bankcardno = bankcardno;
-    }
 
     public String getCustid() {
         return custid;
@@ -110,4 +101,36 @@
     public void setInputdate(String inputdate) {
         this.inputdate = inputdate;
     }
+
+    public String getDeptcode() {
+        return deptcode;
+    }
+
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
+    }
+
+    public Integer getDiscnt() {
+        return discnt;
+    }
+
+    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;
+    }
+
+    public void setDiscnt(Integer discnt) {
+        this.discnt = discnt;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeptSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeptSearchBean.java
index da93407..a70f465 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeptSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeptSearchBean.java
@@ -3,22 +3,13 @@
 import com.supwisdom.dlpay.system.bean.PageBean;
 
 public class DeptSearchBean extends PageBean {
-    private String deptname;
-    private String deptcode;
+    private String searchkey;
 
-    public String getDeptname() {
-        return deptname;
+    public String getSearchkey() {
+        return searchkey;
     }
 
-    public void setDeptname(String deptname) {
-        this.deptname = deptname;
-    }
-
-    public String getDeptcode() {
-        return deptcode;
-    }
-
-    public void setDeptcode(String deptcode) {
-        this.deptcode = deptcode;
+    public void setSearchkey(String searchkey) {
+        this.searchkey = searchkey;
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
index 5b50f30..b04b17d 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
@@ -3,6 +3,7 @@
 
 import com.google.gson.Gson;
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.ExportExcel;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
@@ -11,11 +12,17 @@
 import com.supwisdom.dlpay.restaurant.bean.CustomerShowBean;
 import com.supwisdom.dlpay.restaurant.domain.TCustType;
 import com.supwisdom.dlpay.restaurant.domain.TCustomer;
+import com.supwisdom.dlpay.restaurant.domain.TDept;
 import com.supwisdom.dlpay.restaurant.service.CustTypeService;
 import com.supwisdom.dlpay.restaurant.service.CustomerService;
+import com.supwisdom.dlpay.restaurant.service.DeptService;
+import com.supwisdom.dlpay.restaurant.service.DeviceDiscountRuleService;
 import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
+import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
@@ -34,21 +41,19 @@
 
     @Autowired
     private CustomerService customerService;
-
+    @Autowired
+    private DeviceDiscountRuleService discountRuleService;
     @Autowired
     private CustTypeService custTypeService;
+    @Autowired
+    private DeptService deptService;
 
     @RequestMapping("/index")
     public String indexView(ModelMap model) {
         List<TCustType> lst = custTypeService.findAll();
-        Map<Integer, String> map = new HashMap<>();
-        for (TCustType type : lst) {
-            map.put(type.getCusttypeid(), type.getCusttypename());
-        }
-        Gson gson = new Gson();
-        String gsonString = gson.toJson(map);
-        model.put("custtypelist", gsonString);
-
+        List<TDept> dept = deptService.findAllDept();
+        model.addAttribute("typelist", lst);
+        model.addAttribute("deptlist", dept);
         return "restaurant/customer/index";
     }
 
@@ -57,14 +62,18 @@
     @ResponseBody
     public PageResult<CustomerShowBean> 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,
+                                             @RequestParam(value = "custtypeid", required = false) Integer custtypeid) {
         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);
+            searchBean.setDeptcode(deptcode);
+            searchBean.setCusttypeid(custtypeid);
             PageResult<CustomerShowBean> bean= customerService.getCustomerPage(searchBean);
 
             return bean;
@@ -78,8 +87,11 @@
     @GetMapping("/loadadd")
     @PreAuthorize("hasPermission('/customer/loadadd','')")
     public String loadadd(Model model) {
-        List<TCustType> list=custTypeService.findAll();
-        model.addAttribute("typelist",list);
+//        List<TCustType> list=custTypeService.findAll();
+//        model.addAttribute("typelist",list);
+//        List<TDept> dept = deptService.findAllDept();
+//        model.addAttribute("deptlist",dept);
+
         return "restaurant/customer/form";
     }
 
@@ -116,9 +128,9 @@
     @PreAuthorize("hasPermission('/customer/download','')")
     @ResponseBody
     public JsonResult downloadfile(HttpServletRequest request, HttpServletResponse response) throws Exception{
-        String[] titles0 = {"姓名",	"市名卡号",	"市名卡银行卡号","人员类别号","手机(选填)"
+        String[] titles0 = {"姓名",	"市名卡号",	"市名卡银行卡号","人员类别号","手机(选填)","部门代码(选填)"
         }; //表头
-        String[][] info0 = {{"张三",	"123456",	"3000000","1","12341234123"
+        String[][] info0 = {{"张三",	"123456",	"3000000","1","12341234123","1"
         }}; // 示例内容
         String fileName0 = "客户导入模板";// 保存数据
 
@@ -149,4 +161,31 @@
     }
 
 
+    @GetMapping("/depttree")
+    @ResponseBody
+    public List<TreeSelectNode> searchDeptTree(@AuthenticationPrincipal TOperator operUser) {
+
+        List<TreeSelectNode> tree = deptService.getDeptSelectTree("");
+        return tree;
+    }
+    @GetMapping("/loaddiscount")
+    @PreAuthorize("hasPermission('/discountrule/load4detail','')")
+    public String loaddiscount() {
+        return "restaurant/customer/discount";
+    }
+
+    @GetMapping("/getdiscount")
+    @ResponseBody
+    public JsonResult getdiscount(@RequestParam String custid) {
+        List<ZTreeNode> nodes = discountRuleService.getUserDiscount(custid);
+        JsonResult result = JsonResult.ok();
+        result.put("node", nodes);
+        return result;
+    }
+
+    @RequestMapping("/savediscount")
+    @ResponseBody
+    public JsonResult savediscount(@RequestParam String custid,@RequestParam String rules) {
+        return discountRuleService.saveDiscountDetails(custid,rules);
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeptController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeptController.java
index 50280a9..9629e7f 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeptController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeptController.java
@@ -3,26 +3,19 @@
 
 import com.google.gson.Gson;
 import com.supwisdom.dlpay.api.bean.JsonResult;
-import com.supwisdom.dlpay.framework.util.ExportExcel;
 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.restaurant.bean.DeptSearchBean;
-import com.supwisdom.dlpay.restaurant.bean.TDeptShowBean;
 import com.supwisdom.dlpay.restaurant.domain.TDept;
 import com.supwisdom.dlpay.restaurant.service.DeptService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 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 java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 @Controller
 @RequestMapping("/dept")
@@ -32,32 +25,25 @@
     private DeptService deptService;
 
     @RequestMapping("/index")
-    public String indexView(ModelMap model) {
-        List<TDept> lst = deptService.findAll();
-        Map<String, String> map = new HashMap<>();
-        for (TDept dept : lst) {
-            map.put(dept.getDeptcode(), dept.getDeptname());
-        }
+    public String deptindex(ModelMap map){
+        List<TDept> dept=deptService.findAllDept();
         Gson gson = new Gson();
-        String gsonString = gson.toJson(map);
-        model.put("deptList", gsonString);
+        String gsonString = gson.toJson(dept);
+        map.put("deptList", gsonString);
         return "restaurant/dept/index";
     }
 
-    @RequestMapping("/list")
-    @PreAuthorize("hasPermission('/dept/index','')")
+    @RequestMapping("/listdept")
     @ResponseBody
-    public PageResult<TDeptShowBean> getDataList(@RequestParam("page") Integer pageNo,
-                                                 @RequestParam("limit") Integer pageSize,
-                                                 @RequestParam(value = "deptname", required = false) String deptname,
-                                                 @RequestParam(value = "deptcode", required = false) String deptcode) {
+    public PageResult<TDept> getDataList(@RequestParam("page") Integer pageNo,
+                                         @RequestParam("limit") Integer pageSize,
+                                         @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;
             DeptSearchBean searchBean = new DeptSearchBean();
             searchBean.setPageNo(pageNo);
-            searchBean.setDeptname(deptname);
-            searchBean.setDeptcode(deptcode);
+            searchBean.setSearchkey(searchKey);
             searchBean.setPageSize(pageSize);
             return deptService.getDeptByKey(searchBean);
         } catch (Exception e) {
@@ -67,19 +53,16 @@
     }
 
 
-    @GetMapping("/loadadd")
-    @PreAuthorize("hasPermission('/dept/loadadd','')")
-    public String loadadd(Model model) {
-        List<TDept> list = deptService.findFDept();
-        model.addAttribute("fdeptlist", list);
+    @GetMapping("/loaddeptadd")
+    public String loadDeptadd(Model model) {
+        List<TDept> list = deptService.findAllDept();
+        model.addAttribute("deptlist", list);
         return "restaurant/dept/form";
     }
 
-    @PostMapping("/add")
-    @PreAuthorize("hasPermission('/dept/add','')")
+    @PostMapping("/adddept")
     @ResponseBody
-    public JsonResult add(@RequestBody TDept dept) {
-        System.out.println(dept);
+    public JsonResult addDept(@RequestBody TDept dept) {
         if (dept != null) {
             return deptService.saveDept(dept);
         } else {
@@ -87,54 +70,28 @@
         }
     }
 
+    @PostMapping("/deletedept")
+    @ResponseBody
+    public JsonResult deleteDept(@RequestParam String deptcode) {
+        return deptService.deleteDept(deptcode);
+    }
+
     @GetMapping("/checkdeptno")
     @ResponseBody
-    public JsonResult delete(@RequestParam String deptno) {
-        if(deptService.checkDeptnoExists(deptno)){
-            return JsonResult.ok();
-        }
-
-        return JsonResult.error("部门代码已存在");
-    }
-
-
-    @PostMapping("/delete")
-    @PreAuthorize("hasPermission('/dept/delete','')")
-    @ResponseBody
-    public JsonResult delete(@RequestParam Long deptno) {
-        return deptService.delete(deptno);
-    }
-
-    @GetMapping("/loadimport")
-    public String loadimport(Model model) {
-        return "restaurant/dept/import";
-    }
-
-
-    @RequestMapping("/download")
-    @ResponseBody
-    public JsonResult downloadfile(HttpServletRequest request, HttpServletResponse response) throws Exception{
-        String[] titles0 = {"部门编号",	"部门名称",	"上级部门编号(若为根部门则填0)","部门英文名称(选填)"
-        }; //表头
-        String[][] info0 = {{"01",	"测试部门",	"0",""
-        }}; // 示例内容
-        String fileName0 = "部门导入模板";// 保存数据
-
+    public JsonResult checkDeptno(@RequestParam("deptno") String deptno) {
         try {
-            ExportExcel.queryexcel(fileName0, titles0,info0,request, response);
-            return JsonResult.ok("操作成功");
+            if (StringUtil.isEmpty(deptno)) {
+                return JsonResult.error("部门代码不能为空");
+            }
+            if (deptService.checkDeptnoExist(deptno.trim())) {
+                return JsonResult.error("部门代码已存在");
+            } else {
+                return JsonResult.ok("success");
+            }
         } catch (Exception e) {
             e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
         }
-        return JsonResult.error("操作失败");
-    }
-
-    @PostMapping("/import")
-    @PreAuthorize("hasPermission('/dept/import','')")
-    @ResponseBody
-    public JsonResult importFile(@RequestParam(value = "file",required = false) MultipartFile file, HttpServletRequest request) throws Exception{
-//    System.out.println("---------under the upload file:"+file);
-        return deptService.importFile(file,request);
     }
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeptDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeptDao.java
index 2506a7b..77ad851 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeptDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeptDao.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.restaurant.dao;
 
 import com.supwisdom.dlpay.restaurant.domain.TDept;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -8,22 +10,21 @@
 import java.util.List;
 
 @Repository
-public interface DeptDao extends JpaRepository<TDept, Long> {
+public interface DeptDao extends JpaRepository<TDept, String> {
 
   @Query("from TDept t where t.status='normal' ")
   List<TDept> findNormalDept();
 
-  List<TDept> findByFdeptcode(String fdeptcode);
+  @Query("from TDept t order by deptno")
+  List<TDept> findAllOrderByDeptno();
 
-  List<TDept> findByDeptcode(String deptcode);
+  Page<TDept> findAllByDeptnameContainingOrDeptnoContainingOrderByDeptcode(String name, String deptno, Pageable pageable);
 
-  Integer countByDeptcode(String deptcode);
+  @Query("select count(t.deptno) from TDept t where t.deptno=?1 ")
+  long checkDeptnoExists(String deptno);
 
-  Integer countByFdeptcode(String fdeptcode);
+  List<TDept> findByDeptno(String deptno);
 
+  int countByFdeptcode(String fdeptcode);
 
-  @Query(value = "select distinct deptno from tb_dept where deptno=?1 or fdept=?1",nativeQuery = true)
-  List<String> findDeptnoByDeptno(String deptno);
-  @Query(value = "select distinct deptno from tb_dept",nativeQuery = true)
-  List<String> findAllDeptno();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountDetailDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountDetailDao.java
index 2b40245..d56a099 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountDetailDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountDetailDao.java
@@ -7,6 +7,8 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface DiscountDetailDao extends JpaRepository<TDiscountDetail, String>, JpaSpecificationExecutor<TDiscountDetail> {
 
@@ -17,4 +19,8 @@
   @Modifying
   @Query("update TDiscountDetail t set t.status=?1 where t.ruleid=?2 ")
   void updateRuleDetailStatusByRuleid(String status, int ruleid);
+
+  List<TDiscountDetail> findAllByUserid(String userid);
+
+  void deleteByUserid(String userid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountRuleDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountRuleDao.java
index 6583740..47481ad 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountRuleDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountRuleDao.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.restaurant.dao;
 
+import com.supwisdom.dlpay.framework.data.NodeData;
 import com.supwisdom.dlpay.restaurant.domain.TDiscountRule;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -18,4 +19,9 @@
 
   @Query("from TDiscountRule where status=?1 order by ruleid ")
   List<TDiscountRule> getDiscountRuleByStatus(String status);
+
+  @Query(value ="select t.ruleid||'' as id, '0' as pid,t.rulename as name," +
+          "0 as checked,0 as open from tb_discount_rule t where t.status='normal'", nativeQuery = true)
+  List<NodeData> findDiscountRuleNode();
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java
index 01bafaf..3b44efc 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCustomer.java
@@ -22,7 +22,7 @@
     private String status;
     private String checkstatus;
     private String inputdate;
-    private String deptno;
+    private String deptcode;
 
     @Id
     @GenericGenerator(name = "idGenerator", strategy = "uuid")
@@ -132,13 +132,13 @@
         this.checkstatus = checkstatus;
     }
 
-    @Column(name = "DEPTNO", length = 32)
-    public String getDeptno() {
-        return deptno;
+    @Column(name = "deptcode", length = 32)
+    public String getDeptcode() {
+        return deptcode;
     }
 
-    public void setDeptno(String deptno) {
-        this.deptno = deptno;
+    public void setDeptcode(String deptcode) {
+        this.deptcode = deptcode;
     }
 
     @Column(name = "inputdate", length = 8)
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDept.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDept.java
index 64727b9..071e390 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDept.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDept.java
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.restaurant.domain;
 
+import org.hibernate.annotations.GenericGenerator;
+
 import javax.persistence.*;
 
 @Entity
@@ -7,13 +9,13 @@
     indexes = {@Index(name = "UK_DEPT_DEPTNO", unique = true, columnList = "DEPTNO")})
 public class TDept {
   @Id
-  @SequenceGenerator(name = "pk_dept_deptcode", sequenceName = "SEQ_DEPTCODE", allocationSize = 1, initialValue = 10)
-  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pk_dept_deptcode")
-  @Column(name="deptno", nullable = false, length = 32)
-  private Long deptno; //ID
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name="DEPTCODE", nullable = false, length = 32)
+  private String deptcode; //ID
 
-  @Column(name="deptcode", nullable = false, length = 20)
-  private String deptcode;  //部门编号,可能会要修改,不能为主键,唯一索引
+  @Column(name="DEPTNO", nullable = false, length = 20)
+  private String deptno;  //部门编号,可能会要修改,不能为主键,唯一索引
 
   @Column(name="DEPTNAME", precision = 600)
   private String deptname; //部门名称
@@ -30,11 +32,11 @@
   @Column(name="LASTSAVED", length = 20)
   private String lastsaved; //最后更新时间
 
-  public Long getDeptno() {
+  public String getDeptno() {
     return deptno;
   }
 
-  public void setDeptno(Long deptno) {
+  public void setDeptno(String deptno) {
     this.deptno = deptno;
   }
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/CardService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/CardService.java
index db7abaa..f128eb2 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/CardService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/CardService.java
@@ -24,9 +24,6 @@
     JsonResult saveCardver(TCardver card);
 
 
-/*    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    TCard getCardByCardno(String cardno);*/
-
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     TCard getCardByCardnoAndCardphyid(String cardno,String Cardphyid);
 
@@ -36,10 +33,11 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     String getMaxCarcver();
 
-
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     List<TCardver> getCardlistByTCardVer(String cardverno);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    TCard getNormalCardByCustid(String custid);
 
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
index 25e1cab..5f2af6b 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
@@ -10,6 +10,7 @@
 import com.supwisdom.dlpay.restaurant.domain.TCard;
 import com.supwisdom.dlpay.restaurant.domain.TCustomer;
 import com.supwisdom.dlpay.restaurant.domain.TDevice;
+import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -26,15 +27,12 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     TCustomer getCustomerByCustid(String custid);
 
-
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult saveCustomer(CustomerSaveBean customer);
 
-
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult deleteCustomer(String custid);
 
-
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult importFile(MultipartFile file, HttpServletRequest request) throws Exception;
 
@@ -43,4 +41,5 @@
 
     TCustomer getCustomerByCardno(String cardno) ;
 
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeptService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeptService.java
index 2ee5589..3c32211 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeptService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeptService.java
@@ -7,6 +7,7 @@
 import com.supwisdom.dlpay.restaurant.bean.TDeptShowBean;
 import com.supwisdom.dlpay.restaurant.domain.TArea;
 import com.supwisdom.dlpay.restaurant.domain.TDeviceGroup;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -18,31 +19,27 @@
 import java.util.List;
 
 public interface DeptService {
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-    PageResult<ZTreeNode> getDeptTree();
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-    PageResult<TDeptShowBean> getDeptByKey(DeptSearchBean param);
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    PageResult<TDept> getDeptByKey(DeptSearchBean param);
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-    List<TDept> findAll();
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-    boolean checkDeptnoExists(String deptno);
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-    List<TDept> findFDept();
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    List<TDept> findAllDept();
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    JsonResult saveDept(TDept dept);
+    JsonResult saveDept(TDept area);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    JsonResult delete(Long deptcode);
+    JsonResult deleteDept(String deptcode);
 
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    boolean checkDeptnoExist(String deptno);
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    JsonResult importFile(MultipartFile file, HttpServletRequest request) throws Exception;
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    TDept getDeptByDeptno(String deptno);
 
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    List<TreeSelectNode> getDeptSelectTree(String deptcode);
 
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
index e0b8586..c64a79e 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.restaurant.service;
 
+import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.exception.WebCheckException;
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.PageResult;
@@ -8,6 +9,8 @@
 import com.supwisdom.dlpay.restaurant.domain.TCustomerList;
 import com.supwisdom.dlpay.restaurant.domain.TDiscountDetail;
 import com.supwisdom.dlpay.restaurant.domain.TDiscountDevbind;
+import com.supwisdom.dlpay.system.bean.ZTreeNode;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -70,4 +73,10 @@
   @Transactional(rollbackFor = Exception.class)
   boolean saveDiscountDetails(int ruleid, List<String> custids ) throws WebCheckException;
 
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+  List<ZTreeNode> getUserDiscount(String custid);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  JsonResult saveDiscountDetails(String custid, String rules);
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CardServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CardServiceImpl.java
index b38fbb5..5ae7fbc 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CardServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CardServiceImpl.java
@@ -6,6 +6,7 @@
 import com.supwisdom.dlpay.restaurant.domain.TCard;
 import com.supwisdom.dlpay.restaurant.domain.TCardver;
 import com.supwisdom.dlpay.restaurant.service.CardService;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -70,4 +71,15 @@
     public List<TCardver> getCardlistByTCardVer(String cardverno) {
         return cardverDao.findAllWhitelist(cardverno);
     }
+
+    @Override
+    public TCard getNormalCardByCustid(String custid) {
+        List<TCard> cards=cardDao.findAllByCustidAndStatus(custid, RestaurantConstant.STATUS_CARD_NORMAL);
+        if(cards.size()>0){
+            return cards.get(0);
+        }
+        return null;
+    }
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
index 25ff130..9b1701c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
@@ -4,15 +4,17 @@
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.restaurant.bean.*;
-import com.supwisdom.dlpay.restaurant.dao.CardDao;
-import com.supwisdom.dlpay.restaurant.dao.CardverDao;
-import com.supwisdom.dlpay.restaurant.dao.CustomerDao;
+import com.supwisdom.dlpay.restaurant.dao.*;
 import com.supwisdom.dlpay.restaurant.domain.TCard;
 import com.supwisdom.dlpay.restaurant.domain.TCardver;
 import com.supwisdom.dlpay.restaurant.domain.TCustomer;
+import com.supwisdom.dlpay.restaurant.domain.TDept;
 import com.supwisdom.dlpay.restaurant.service.CardService;
 import com.supwisdom.dlpay.restaurant.service.CustomerService;
+import com.supwisdom.dlpay.restaurant.service.DeptService;
 import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import com.supwisdom.dlpay.system.bean.ZTreeNode;
+import org.apache.commons.lang3.StringUtils;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,17 +42,34 @@
     private CardDao cardDao;
     @Autowired
     private CardverDao cardverDao;
+    @Autowired
+    private DeptService deptService;
+    @Autowired
+    private DiscountDetailDao discountDetailDao;
 
     @PersistenceContext
     private EntityManager entityManager;
 
     @Override
     public PageResult<CustomerShowBean> getCustomerPage(CustomerSearchBean param) {
-        StringBuffer querySql = new StringBuffer("select t.cardno,c.custid,c.custname,c.inputdate, " +
+
+        StringBuffer querySql = new StringBuffer("select t.cardno,c.custid,c.custname,c.inputdate,gg.discnt,d.deptcode,d.deptname,p.custtypename, " +
                 "t.bankcardno,t.cardphyid,c.phone,c.custtype,c.checkstatus,t.status from tb_customer c " +
-                "left join Tb_card t on t.custid=c.custid where 1=1 ");
+                "left join Tb_card t on t.custid=c.custid " +
+                "left join (select  cardno,cast(count(ruleid) as int4)as discnt from tb_discount_detail group by cardno) gg " +
+                "on t.cardno=gg.cardno " +
+                "left join tb_dept d on c.deptcode= d.deptcode " +
+                "left join tb_custtype p on c.custtype=p.custtypeid " +
+
+                " where 1=1 ");
         StringBuffer countSql = new StringBuffer("select count(*) as cnt from tb_customer c " +
-                "left join Tb_card t on t.custid=c.custid where 1=1 ");
+                "left join Tb_card t on t.custid=c.custid " +
+                "left join (select  cardno,cast(count(ruleid) as int4)as discnt from tb_discount_detail group by cardno) gg " +
+                "on t.cardno=gg.cardno " +
+                "left join tb_dept d on c.deptcode= d.deptcode " +
+                "left join tb_custtype p on c.custtype=p.custtypeid " +
+
+                " where 1=1 ");
         if (!StringUtil.isEmpty(param.getCustname())) {
             querySql.append(" and  c.custname like :str ");
             countSql.append(" and  c.custname like :str ");
@@ -59,6 +78,20 @@
             querySql.append(" and  c.checkstatus = :checkstatus ");
             countSql.append(" and  c.checkstatus = :checkstatus ");
         }
+        Integer i=param.getCusttypeid();
+        if (null!=i&&-1!=i){
+            querySql.append(" and c.custtype = :custtypeid ");
+            countSql.append( " and c.custtype = :custtypeid ");
+        }
+        if (!StringUtil.isEmpty(param.getDeptcode())) {
+            List<String> childdplist = getChildDeptlist( param.getDeptcode());
+            if (!StringUtil.isEmpty(childdplist)) {
+                querySql.append(" and c.deptcode in ('"+ StringUtils.join(childdplist.toArray(),"','")+"') ");
+                countSql.append(" and c.deptcode in ('"+ StringUtils.join(childdplist.toArray(),"','")+"') ");
+            }
+        }
+
+
         querySql.append(" order by t.cardno ");
         Query query = entityManager.createNativeQuery(querySql.toString());
         Query countQuery = entityManager.createNativeQuery(countSql.toString());
@@ -70,6 +103,10 @@
             query.setParameter("checkstatus", param.getCheckstatus().trim());
             countQuery.setParameter("checkstatus", param.getCheckstatus().trim());
         }
+        if (null!=i&&-1!=i){
+            query.setParameter("custtypeid", param.getCusttypeid());
+            countQuery.setParameter("custtypeid", param.getCusttypeid());
+        }
         query.setFirstResult((param.getPageNo() - 1) * param.getPageSize());
         query.setMaxResults(param.getPageSize()); //分页显示
         query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(CustomerShowBean.class));
@@ -109,6 +146,7 @@
         cus.setStatus(customer.getStatus());
         cus.setCheckstatus(customer.getCheckstatus());
         cus.setInputdate(DateUtil.getNow("yyyyMMdd"));
+        cus.setDeptcode(customer.getDeptcode());
         cus = customerDao.save(cus);
         if (null != cus) {
             if(0==customer.getSavecardflag()){
@@ -169,7 +207,7 @@
             String date = DateUtil.getNow("yyyyMMdd");
             saveCardver(cardverno, date, c, c.getStatus(), RestaurantConstant.STATUS_CARD_LOGOUT, 0);
         }
-
+        discountDetailDao.deleteByUserid(custid);
 
         customerDao.deleteById(custid);
         return JsonResult.ok("成功");
@@ -224,6 +262,17 @@
                     if (null != data[i][4]) {
                         d.setPhone((String) data[i][4]);
                     }
+                    if(null!=data[i][5]){
+                        String deptno=(String)data[i][5];
+                        TDept dept=deptService.getDeptByDeptno(deptno);
+                        if(null==dept){
+                            msg = msg + "第" + i + "行,部门不存在。<br/>";
+                            failCnt += 1;
+                        }
+                        d.setDeptcode(dept.getDeptcode());
+                    }
+
+
                     if(cardDao.countByCardno((String) data[i][1]) > 0){
                         d.setSavecardflag(1);
                         msg = msg + "第" + i + "行,卡号已存在,请手动添加市名卡号和银行卡号。<br/>";
@@ -286,7 +335,9 @@
 
     private List<CustomerExportBean> getCustomerExport() {
         StringBuffer querySql = new StringBuffer(
-                "select c.custname,c.phone,t.cardno,t.bankcardno from tb_card t left join tb_customer c on t.custid=c.custid");
+                "select c.custname,c.phone,t.cardno,t.bankcardno,d.deptname from tb_card t" +
+                        " left join tb_customer c on t.custid=c.custid" +
+                        "left join tb_dept d on c.deptcode=d.deptcode");
 
         Query query = entityManager.createNativeQuery(querySql.toString());
         query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(CustomerExportBean.class));
@@ -309,4 +360,18 @@
         return null;
     }
 
+    private  List<String> getChildDeptlist( String deptcode) {
+        List<String> childdplist=null;
+        if (!StringUtil.isEmpty(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;
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptReportServiceImpl.java
index bf9e8a3..ced3370 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptReportServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptReportServiceImpl.java
@@ -4,21 +4,15 @@
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
-import com.supwisdom.dlpay.framework.util.MoneyUtil;
-import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.restaurant.bean.*;
-import com.supwisdom.dlpay.restaurant.dao.*;
-import com.supwisdom.dlpay.restaurant.service.DailyReportService;
+import com.supwisdom.dlpay.restaurant.bean.DeptReportSearchBean;
+import com.supwisdom.dlpay.restaurant.bean.DeptReportSearchData;
+import com.supwisdom.dlpay.restaurant.bean.DeptReportShowBean;
+import com.supwisdom.dlpay.restaurant.dao.CheckCtlDao;
+import com.supwisdom.dlpay.restaurant.dao.DeptDao;
+import com.supwisdom.dlpay.restaurant.dao.MealTypeDao;
+import com.supwisdom.dlpay.restaurant.dao.MealsdtlDao;
 import com.supwisdom.dlpay.restaurant.service.DeptReportService;
-import com.supwisdom.dlpay.restaurant.service.DeptService;
-import com.supwisdom.dlpay.restaurant.util.ExcelPoiUtil;
-import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
-import org.apache.poi.hssf.usermodel.HSSFCellStyle;
-import org.apache.poi.hssf.usermodel.HSSFRow;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.util.CellRangeAddress;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
 import org.slf4j.Logger;
@@ -30,7 +24,6 @@
 import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
 import javax.servlet.http.HttpServletResponse;
-import java.io.OutputStream;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptServiceImpl.java
index 96ffa1d..37a2c7b 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeptServiceImpl.java
@@ -10,6 +10,7 @@
 import com.supwisdom.dlpay.restaurant.dao.DeptDao;
 import com.supwisdom.dlpay.restaurant.domain.TDept;
 import com.supwisdom.dlpay.restaurant.service.DeptService;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
@@ -40,164 +41,112 @@
     private EntityManager entityManager;
 
 
+
     @Override
-    public PageResult<ZTreeNode> getDeptTree() {
-        List<TDept> groups=deptDao.findAll();
-        List<ZTreeNode> zlist=new ArrayList<>();
-        for(TDept g:groups){
-            ZTreeNode z=new ZTreeNode();
-            z.setId(g.getDeptcode().toString());
-            z.setName(g.getDeptname());
-            if(g.getFdeptcode()==null){
-                z.setpId("0");
-            }else{
-                z.setpId(g.getDeptcode().toString());
-            }
-            z.setChecked(false);
-            z.setOpen(true);
-            zlist.add(z);
+    public PageResult<TDept> getDeptByKey(DeptSearchBean param) {
+        Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
+                , Sort.by("deptno"));
+        if (!StringUtil.isEmpty(param.getSearchkey())) {
+            return new PageResult<>(deptDao.findAllByDeptnameContainingOrDeptnoContainingOrderByDeptcode(param.getSearchkey(), param.getSearchkey(), pageable));
         }
-        PageResult<ZTreeNode> p=new PageResult<>(zlist);
-        p.setCode(0);
-        return p;
+
+        return new PageResult<>(deptDao.findAll(pageable));
     }
 
     @Override
-    public PageResult<TDeptShowBean> getDeptByKey(DeptSearchBean param) {
-
-        StringBuffer querySql = new StringBuffer("select t.deptcode,t.deptno,t.deptname, " +
-                "t.fdeptcode,t.ename,t.lastsaved from tb_dept t where 1=1 ");
-        StringBuffer countSql = new StringBuffer("select count(*) as cnt from tb_dept t " +
-                " where 1=1 ");
-        if (!StringUtil.isEmpty(param.getDeptname())) {
-            querySql.append(" and  t.deptname like :str ");
-            countSql.append(" and  t.deptname like :str ");
-        }
-        if (!StringUtil.isEmpty(param.getDeptcode())) {
-            querySql.append(" and  t.deptcode = :deptcode ");
-            countSql.append(" and  t.deptcode = :deptcode ");
-        }
-        querySql.append(" order by t.deptcode ");
-        Query query = entityManager.createNativeQuery(querySql.toString());
-        Query countQuery = entityManager.createNativeQuery(countSql.toString());
-        if (!StringUtil.isEmpty(param.getDeptname())) {
-            query.setParameter("str", "%" + param.getDeptname().trim() + "%");
-            countQuery.setParameter("str", "%" + param.getDeptname().trim() + "%");
-        }
-        if (!StringUtil.isEmpty(param.getDeptcode())) {
-            query.setParameter("deptcode", "%" + param.getDeptcode().trim() + "%");
-            countQuery.setParameter("deptcode", "%" + param.getDeptcode().trim() + "%");
-        }
-        query.setFirstResult((param.getPageNo() - 1) * param.getPageSize());
-        query.setMaxResults(param.getPageSize()); //分页显示
-        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TDeptShowBean.class));
-        List<TDeptShowBean> list = query.getResultList();
-        BigInteger count = (BigInteger) countQuery.getSingleResult();
-        return new PageResult<>(count.longValue(), list);
-    }
-
-    @Override
-    public List<TDept> findAll() {
-        return deptDao.findAll();
-    }
-
-    @Override
-    public boolean checkDeptnoExists(String deptcode) {
-        List<TDept> depts=deptDao.findByDeptcode(deptcode);
-        if(depts.size()>0){
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public List<TDept> findFDept() {
-        return deptDao.findByFdeptcode("0");
+    public List<TDept> findAllDept() {
+        return deptDao.findAllOrderByDeptno();
     }
 
     @Override
     public JsonResult saveDept(TDept dept) {
+       /* TArea temp = areaDao.findByAreaname(area.getAreaname());
+        if (temp != null) {
+            return JsonResult.error("地区名重复");
+        }*/
         dept.setLastsaved(DateUtil.getNow());
         dept.setStatus("normal");
         deptDao.save(dept);
-
-        return JsonResult.ok("保存成功");
+        return JsonResult.ok("成功");
     }
 
     @Override
-    public JsonResult delete(Long deptcode) {
+    public JsonResult deleteDept(String deptcode) {
+        if("0".equals(deptcode)){
+            return JsonResult.error("根目录不能删除");
+        }
+        if(deptDao.countByFdeptcode(deptcode)>0){
+            return JsonResult.error("不能删除含有子部门的部门");
+        }
         deptDao.deleteById(deptcode);
         return JsonResult.ok("成功");
     }
 
     @Override
-    public JsonResult importFile(MultipartFile file, HttpServletRequest request) throws Exception {
-        String fname = file.getOriginalFilename();
-        if (!fname.endsWith(".xls") && !fname.endsWith(".xlsx")) {
+    public boolean checkDeptnoExist(String deptno) {
+        if (deptDao.checkDeptnoExists(deptno) > 0) {
+            return true;
+        }
+        return false;
+    }
 
-            return JsonResult.error("文件格式错误,请选择excel文件格式(.xls/.xlsx)");
+    @Override
+    public TDept getDeptByDeptno(String deptno) {
+        List<TDept> dept=deptDao.findByDeptno(deptno);
+        return dept.size()>0?dept.get(0):null;
+    }
+
+    public List<TreeSelectNode> getDeptSelectTree(String deptcode) {
+        List<TDept> groupList;
+        String pid;
+        if(StringUtil.isEmpty(deptcode)){
+            groupList = deptDao.findAll();
+            pid="-1";
+        }else{
+            groupList=getChildDeptlist(deptcode);
+            pid="0";
         }
 
-//    InputStream excelstream = new FileInputStream(savePath+"/"+fname);
-        InputStream excelstream = file.getInputStream();
-        List<Object[][]> oList = null;
-        try {
-            if (fname.endsWith(".xls")) {
-                oList = ImportExcelUtil.getIntegralData(excelstream);//2003版本
-            } else {
-                oList = ImportExcelUtil.getIntegralData07(excelstream);//2007版本以上
-            }
-        } catch (Exception e) {
-            return JsonResult.error("模板格式错误,请重新下载模板");
-        }
+        if (StringUtil.isEmpty(groupList)) return new ArrayList<>(0);
+        return getDeptTree(groupList, pid);
+    }
 
-
-        String msg = "";
-        Integer successCnt = 0;
-        Integer failCnt = 0;
-        String batchno = DateUtil.getNow("yyyyMMddHHmmss");
-        for (Object[][] data : oList) {
-            for (int i = 1; i < data.length; i++) {
-                String deptcode=(String) data[i][0];
-                String deptname=(String) data[i][1];
-                String fdeptcode=(String) data[i][2];
-
-                if (StringUtil.isEmpty((String) data[i][0]) || StringUtil.isEmpty((String) data[i][1]) || StringUtil.isEmpty((String) data[i][2])) {
-                    msg = msg + "第" + i + "行,关键字段缺失。<br/>";
-                    failCnt += 1;
-                } else if (deptDao.countByDeptcode(deptcode) > 0) {
-                    msg = msg + "第" + i + "行,该部门编号在系统中已存在。<br/>";
-                    failCnt += 1;
-                } else if (deptDao.countByFdeptcode(fdeptcode) > 0) {
-                    msg = msg + "第" + i + "行,上级部门系统中不存在。<br/>";
-                    failCnt += 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()))) {
+            if ( (null != pid && pid.equals(gp.getFdeptcode()))) {
+                TreeSelectNode node = new TreeSelectNode();
+                node.setId(gp.getDeptcode());
+                node.setName(gp.getDeptname());
+                node.setOpen(true);
+                node.setChecked(false);
+                List<TreeSelectNode> children = getDeptTree(groupList, gp.getDeptcode());
+                if (!StringUtil.isEmpty(children)) {
+                    node.setChildren(children);
                 } else {
-                    TDept d = new TDept();
-                    d.setDeptname(deptname);
-                    d.setDeptcode(deptcode);
-                    d.setFdeptcode(fdeptcode);
-                    d.setLastsaved(batchno);
-                    if (null != data[i][3]) {
-                        d.setEname((String) data[i][3]);
-                    }
-
-                    d.setStatus("normal");
-                    saveDept(d);
-                    successCnt += 1;
+                    node.setChildren(null);
                 }
+                result.add(node);
             }
         }
-        /*resp.setCode(Code.SUCCESS);
-        // resp.setMsg("成功导入了"+sList.size()+"条信息");
-        resp.setMsg(String.format(Locale.CHINESE, msg));
-        return resp;*/
+        return result;
+    }
 
 
-        if (StringUtil.isEmpty(msg)) {
-            return JsonResult.ok("成功导入" + oList.size() + "条信息");
+    private  List<TDept> getChildDeptlist( String deptcode) {
+        List<TDept> childdplist=null;
+        if (!StringUtil.isEmpty(deptcode)) {
+            Query query = 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 * from r order by deptno");
+            query.setParameter("deptcode", deptcode);
+
+            query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TDept.class));
+            childdplist = query.getResultList();
         }
-        msg = "导入成功" + successCnt + "条,导入失败" + failCnt + "条<br/>" + msg;
-
-        return JsonResult.error(String.format(Locale.CHINESE, msg));
+        return childdplist;
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
index cce8dfc..7617bb7 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
@@ -1,7 +1,11 @@
 package com.supwisdom.dlpay.restaurant.service.impl;
 
+import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.data.NodeData;
 import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.domain.TPermission;
+import com.supwisdom.dlpay.framework.domain.TRoleFunction;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.ImportExcelUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
@@ -9,10 +13,12 @@
 import com.supwisdom.dlpay.restaurant.bean.*;
 import com.supwisdom.dlpay.restaurant.dao.*;
 import com.supwisdom.dlpay.restaurant.domain.*;
+import com.supwisdom.dlpay.restaurant.service.CardService;
 import com.supwisdom.dlpay.restaurant.service.CustomerListService;
 import com.supwisdom.dlpay.restaurant.service.CustomerService;
 import com.supwisdom.dlpay.restaurant.service.DeviceDiscountRuleService;
 import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
@@ -54,10 +60,12 @@
     @Autowired
     private CustomerListService customerListService;
 
-
     @Autowired
     private CustomerService customerService;
 
+    @Autowired
+    private CardService cardService;
+
     @PersistenceContext
     private EntityManager entityManager;
 
@@ -557,6 +565,62 @@
         return true;
     }
 
+    @Override
+    public List<ZTreeNode> getUserDiscount(String custid) {
+        List<NodeData> nodeData = discountRuleDao.findDiscountRuleNode();
+        List<TDiscountDetail> details=discountDetailDao.findAllByUserid(custid);
+        List<ZTreeNode> ret = new ArrayList<>();
+        ZTreeNode zTreeNode = new ZTreeNode();
+        zTreeNode.setpId("-1");
+        zTreeNode.setId("0");
+        zTreeNode.setName("餐补列表");
+        zTreeNode.setChecked(false);
+        zTreeNode.setOpen(true);
+        ret.add(zTreeNode);
+
+        for (NodeData data : nodeData) {
+            zTreeNode = new ZTreeNode();
+            zTreeNode.setpId(data.getPid());
+            zTreeNode.setId(data.getId());
+            zTreeNode.setName(data.getName());
+            zTreeNode.setChecked(false);
+            for(TDiscountDetail detail:details){
+                if(detail.getRuleid().toString().equals(data.getId())){
+                    zTreeNode.setChecked(true);
+                }
+            }
+            zTreeNode.setOpen(true);
+            ret.add(zTreeNode);
+        }
+        return ret;
+    }
+
+    @Override
+    public JsonResult saveDiscountDetails(String custid, String rules) {
+        TCustomer customer=customerService.getCustomerByCustid(custid);
+        if(null==customer){
+            return JsonResult.error("客户不存在");
+        }
+        TCard card=cardService.getNormalCardByCustid(custid);
+        discountDetailDao.deleteByUserid(custid);
+        String[] datas = rules.split(",");
+        for (String rule : datas) {
+            if("0".equals(rule)){
+                continue;
+            }
+            TDiscountDetail detail = new TDiscountDetail();
+            detail.setRuleid(Integer.parseInt(rule.trim()));
+            detail.setCardno(card.getCardno());
+            detail.setUsername(customer.getCustname());
+            detail.setUserid(customer.getCustid());
+            detail.setStatus("normal");
+            detail.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+            discountDetailDao.save(detail); //保存明细
+        }
+        return JsonResult.ok("成功");
+
+    }
+
     private DiscountDetailAddBean getDiscountDetailForAdd(String custid){
         StringBuffer querySql = new StringBuffer("select t.custid,t.custname,c.cardno from tb_customer t " +
                 "left join tb_card c on t.custid=c.custid where  t.custid=:custid ");
diff --git a/src/main/resources/templates/restaurant/customer/discount.html b/src/main/resources/templates/restaurant/customer/discount.html
new file mode 100644
index 0000000..c350363
--- /dev/null
+++ b/src/main/resources/templates/restaurant/customer/discount.html
@@ -0,0 +1,89 @@
+<div style="padding: 0 20px">
+    <div class="layui-form-item" style="max-height: 490px;overflow: auto;">
+        <ul id="discountlist" class="ztree"></ul>
+    </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="form-submit" id="discount-submitbtn">保存</button>
+    </div>
+</div>
+<script>
+    layui.use(['layer', 'admin', 'form', 'formSelects'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var custid = admin.getTempData('custid');
+        let initTree = function (nodes) {
+            let menuSetting = {
+                view: {
+                    dblClickExpand: true,
+                    showLine: true,
+                    showIcon: false
+                },
+                check: {
+                    enable: true,
+                },
+                data: {
+                    simpleData: {
+                        enable: true
+                    }
+                }
+            };
+            $.fn.zTree.init($("#discountlist"), menuSetting, nodes);
+        }
+        admin.dgo('[[@{/customer/getdiscount}]]', {
+            custid: custid,
+        }, function (data) {
+            layer.closeAll('loading');
+            if (data.code == 200) {
+                initTree(data.node);
+            } 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});
+            }
+        }, function (ret) {
+            layer.closeAll('loading');
+            layer.msg('请求失败了,请稍后再试', {icon: 2});
+        });
+        $("#discount-submitbtn").on('click', function (e) {
+            let ids = [];
+            let treeObj = $.fn.zTree.getZTreeObj("discountlist");
+            let nodes = treeObj.getCheckedNodes(true);
+            for (let i = 0; i < nodes.length; i++) {
+                ids.push(nodes[i].id);//存功能ID
+            }
+            if (ids.length < 1) {
+                return;
+            }
+            let idStr = ids.toString();
+            console.log(idStr)
+            let token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('[[@{/customer/savediscount}]]', {
+                custid: custid,
+                rules: idStr,
+                _csrf: token,
+            }, function (data) {
+                layer.closeAll('loading');
+                if (data.code == 200) {
+                    layer.msg(data.msg, {icon: 1});
+                    admin.finishPopupCenter();
+                } 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});
+                }
+            }, 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/restaurant/customer/form.html b/src/main/resources/templates/restaurant/customer/form.html
index 0ae132f..cc312e3 100644
--- a/src/main/resources/templates/restaurant/customer/form.html
+++ b/src/main/resources/templates/restaurant/customer/form.html
@@ -32,6 +32,14 @@
             </select>
         </div>
     </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">部门</label>
+        <div class="layui-input-block">
+            <select name="deptcode" id="customer-deptment" lay-verify="required">
+                <option th:each="dept : ${deptlist}" th:value="${dept.deptcode}">[[${dept.deptname}]]</option>
+            </select>
+        </div>
+    </div>
 
     <div class="layui-form-item">
         <label class="layui-form-label"><span style="color: red">* </span>银行卡号</label>
diff --git a/src/main/resources/templates/restaurant/customer/index.html b/src/main/resources/templates/restaurant/customer/index.html
index 3e91ddc..f896fcf 100644
--- a/src/main/resources/templates/restaurant/customer/index.html
+++ b/src/main/resources/templates/restaurant/customer/index.html
@@ -9,7 +9,21 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索:
-            <input id="customer-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"/>&emsp;
+            <div class="layui-inline" style="margin-right: 20px;">
+                <input id="customer-search-value" class="layui-input search-input" type="text" placeholder="输入姓名"
+                />
+                <select  class="layui-select"   id="customer-search-custtype"   style="margin-right: 20px">
+                    <option value="">全部</option>
+                    <option th:each="type : ${typelist}" th:value="${type.custtypeid}">[[${type.custtypename}]]</option>
+                </select>
+                <select  class="layui-select"   id="customer-search-deptcode"   style="margin-right: 20px">
+                    <option value="">全部</option>
+                    <option th:each="dept : ${deptlist}" th:value="${dept.deptcode}">[[${dept.deptname}]]</option>
+                </select>
+<!--                <input id="search-customer-deptcode" type="text"-->
+<!--                       lay-filter="search-customer-deptcode-filter" autocomplete="off"-->
+<!--                       class="layui-input search-input"/>-->
+            </div>
             <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>
@@ -19,19 +33,40 @@
         <table class="layui-table" id="customer-table" lay-filter="customer-table"></table>
     </div>
 </div>
-<input hidden th:value="${custtypelist}" id="custtypelist">
 
 <script>
 
-    var rawlist=$("#custtypelist").val();
-    var custtypelist=JSON.parse(rawlist);
-    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;
+        form.render("select");
 
-        form.render('select');
-
+        // var treeSelect=layui.treeSelect;
+        // 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',
@@ -40,13 +75,21 @@
             minWidth: 80,
             cols: [
                 [
-                    {field: 'custname', sort: true, width: 120, title: '客户姓名'},
-                    {field: 'cardno', sort: true,width: 120, title: '市名卡号'},
-                    {field: 'phone',  title: '联系电话'},
-                    {field: 'bankcardno', sort: true, width: 200, title: '银行卡号'},
-                    {field: 'inputdate', sort: true, width: 120, title: '保存日期'},
+                    {field: 'custname', sort: true, title: '客户姓名'},
+                    {field: 'cardno', sort: true, title: '市名卡号'},
+                    {field: 'deptname', sort: true, title: '部门'},
+                    {field: 'custtypename',  title: '客户类别'},
                     {
-                        field: 'checkstatus', title: '审核状态', align: 'center', width: 120, sort: true, templet: function (d) {
+                        field: 'discnt', title: '有无餐补', align: 'center', width: 120, sort: true, templet: function (d) {
+                            if (0< d.discnt) {
+                                return '<span class="layui-badge layui-bg-green">有</span>';
+                            }  else {
+                                return '<span class="layui-badge layui-bg-gray">无</span>';
+                            }
+                        }
+                    },
+                    {
+                        field: 'checkstatus', title: '审核状态', align: 'center', sort: true, templet: function (d) {
                             if ('uncheck' == d.checkstatus) {
                                 return '<span class="layui-badge layui-bg-orange">待审核</span>'
                             } else if ('normal' == d.checkstatus) {
@@ -60,17 +103,9 @@
                     },
 
                     {
-                        field: 'custtype', width:100, title: '人员类别', templet: function (item) {
-                            if(item.custtype==null){
-                                return ''
-                            }else{
-                                return custtypelist[item.custtype];
-                            }
-                        }
-                    },
-                    {
-                        field: 'custid', align: 'center',width:150, title: '操作', fixed: 'right', templet: function (item) {
+                        field: 'custid', align: 'center',title: '操作',width:250, fixed: 'right', templet: function (item) {
                             return ' <a class="layui-btn  layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> '+
+                                ' <a class="layui-btn  layui-btn-xs" lay-event="discount"><i class="layui-icon layui-icon-edit"></i>设置餐补</a> '+
                                 ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>删除</a>';
                         }
                     }
@@ -89,7 +124,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-search-deptcode').val();
+            let custtypeid=$('#customer-search-custtype').val();
+            table.reload('customer-table', {where: {custname: key,deptcode:deptcode,custtypeid:custtypeid}, page: {curr: 1}});
         });
         $('#customer-btn-add').click(function () {
             showModel();
@@ -127,10 +164,22 @@
             console.log(data);
             if (layEvent === 'edit') {
                 showModel(data);
+            } else if (layEvent === 'discount') {
+                showDiscount(data);
             } else if (layEvent === 'del') {
                 showDelete(data);
             }
         });
+        let showDiscount = function (data) {
+            let title = '分配餐补';
+            admin.putTempData('custid', data.custid);
+            admin.popupCenter({
+                title: title,
+                area:['400px','600px'],
+                path: '[[@{/customer/loaddiscount}]]'
+            });
+        };
+
         let showDelete = function (data) {
             console.log(data);
             layer.confirm('确定要删除吗?', function (i) {
diff --git a/src/main/resources/templates/restaurant/dept/form.html b/src/main/resources/templates/restaurant/dept/form.html
index e828411..33d2c35 100644
--- a/src/main/resources/templates/restaurant/dept/form.html
+++ b/src/main/resources/templates/restaurant/dept/form.html
@@ -1,50 +1,36 @@
+<!-- operator表单弹窗 -->
+<form id="dept-form" lay-filter="dept-form" class="layui-form model-form">
+    <input name="deptcode" id="deptcode" type="hidden"/>
 
-<form id="dept-form" lay-filter="form" class="layui-form model-form">
-    <input name="deptno" id="dept-id" type="hidden"/>
     <div class="layui-form-item">
-        <label class="layui-form-label"><span style="color: red">* </span>部门代码</label>
+        <label class="layui-form-label">部门代码</label>
         <div class="layui-input-block">
-            <input name="deptcode" placeholder="不能重复" type="text" class="layui-input" maxlength="20"
-                   lay-verify="required|deptcode" required/>
+            <input name="deptno" placeholder="" type="text" class="layui-input"
+                   lay-verify="deptcode" />
         </div>
     </div>
+
     <div class="layui-form-item">
-        <label class="layui-form-label"><span style="color: red">* </span>部门名称</label>
+        <label class="layui-form-label">部门名称</label>
         <div class="layui-input-block">
-            <input name="deptname" type="text" class="layui-input"
-                   required/>
-        </div>
-    </div>
-    <div class="layui-form-item">
-        <label class="layui-form-label"></span>部门英语名称</label>
-        <div class="layui-input-block">
-            <input name="ename"  type="text" class="layui-input" maxlength="20"
-                  />
+            <input name="deptname" placeholder="" type="text" class="layui-input"
+                   lay-verify="required" />
         </div>
     </div>
 
     <div class="layui-form-item">
         <label class="layui-form-label">上级部门</label>
         <div class="layui-input-block">
-            <select name="fdeptcode" id="dept-fdeptcode" lay-verify="required">
-                <option  value="0">根部门</option>
-                <option th:each="type : ${fdeptlist}" th:value="${type.deptcode}">[[${type.deptname}]]</option>
+            <select name="fdeptcode" id="fdeptcode" lay-verify="required">
+             <!--   <option value="0">根部门</option>-->
+                <option th:each="dept : ${deptlist}" th:value="${dept.deptcode}">[[${dept.deptname}]]</option>
             </select>
         </div>
     </div>
 
-   <!-- <div class="layui-form-item">
-        <label class="layui-form-label">上级部门</label>
-        <div class="layui-input-block">
-            <input type="text" name="fdeptcode" id="dept-fdeptcode"  lay-filter="dept-search-fdeptcode-filter"
-                   autocomplete="off" class="layui-input"/>
-        </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="dept-form-submit" lay-submit id="submitbtn">保存</button>
+        <button class="layui-btn" lay-filter="dept-form-submit" lay-submit id="dept-submitbtn">保存</button>
     </div>
 </form>
 
@@ -53,22 +39,24 @@
         var layer = layui.layer;
         var admin = layui.admin;
         var form = layui.form;
-        form.render('select');
-        form.render('radio');
-        form.verify({
 
+        form.render('select');
+
+        form.verify({
             "deptcode": function (e) {
-                if(""==e|| ""==$.trim(e)){
+                if ("" == e || "" == $.trim(e)) {
                     return "部门代码不能为空";
                 }
-
                 var msg = "";
+                if(ct){
+                    return;
+                }
                 $.ajax({
                     type: "GET",
-                    url: '[[@{/dept/checkdeptcode}]]',
+                    url: '[[@{/dept/checkdeptno}]]',
                     async: false, //同步提交。不设置则默认异步,异步的话,最后执行ajax
                     data: {
-                        deptcode: e,
+                        deptno: e
                     },
                     success: function (result) {
                         if (result.code != 200) {
@@ -85,23 +73,18 @@
             }
         });
 
-        var url = '[[@{/dept/add}]]';
+
+        var url = '[[@{/dept/adddept}]]';
         // 回显user数据
-        var dev = admin.getTempData('t_dev');
-        if (dev) {
-            $('input[name="deptcode"]').attr('readonly', 'readonly');
-            form.val('form', dev);
+        var ct = admin.getTempData('t_ct');
+        if (ct) {
+          //  $('input[name="deptid"]').attr('readonly', 'readonly');
+            form.val('dept-form', ct);
         }
-       /* let fid = admin.getTempData("fid");
-        if (fid) {
-            form.val('form', {"fid": fid});
-        }*/
         // 表单提交事件
         form.on('submit(dept-form-submit)', function (data) {
-            console.log(data);
             layer.load(2);
             let token = $("meta[name='_csrf_token']").attr("value");
-            console.log(token);
             $.ajax({
                 type: "POST",
                 dataType: "json",
@@ -135,4 +118,5 @@
             return false;
         });
     });
-</script>
\ No newline at end of file
+</script>
+
diff --git a/src/main/resources/templates/restaurant/dept/index.html b/src/main/resources/templates/restaurant/dept/index.html
index 718795c..7986a86 100644
--- a/src/main/resources/templates/restaurant/dept/index.html
+++ b/src/main/resources/templates/restaurant/dept/index.html
@@ -9,60 +9,57 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索:
-            <input id="dept-deptname" class="layui-input search-input" type="text" placeholder="部门名称"/>&emsp;
-            <input id="dept-deptcode" class="layui-input search-input" type="text" placeholder="部门代码"/>&emsp;
-
+            <input id="dept-search-value" class="layui-input search-input" type="text" placeholder="输入部门代码或名称"/>&emsp;
             <button id="dept-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
             <button id="dept-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加部门</button>
-            <button id="dept-btn-import" class="layui-btn icon-btn" ><i class="layui-icon"></i>批量导入</button>
-
         </div>
         <table class="layui-table" id="dept-table" lay-filter="dept-table"></table>
     </div>
 </div>
-<input hidden th:value="${deptList}" id="deptlist">
+<input hidden th:value="${deptList}" id="dplist">
 <script>
-
-    var rawlist=$("#deptlist").val();
-    var deptlist=JSON.parse(rawlist);
+    var rawlist=$("#dplist").val();
+    var dplist=JSON.parse(rawlist);
 
     layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
         let form = layui.form;
         let table = layui.table;
         let admin = layui.admin;
 
-        form.render('select');
+       // form.render('select');
 
         // 渲染表格
         table.render({
             elem: '#dept-table',
-            url: '[[@{/dept/list}]]',
+            url: '[[@{/dept/listdept}]]',
             page: true,
             cols: [
                 [
-                    {field: 'deptcode', title: '部门代码', sort: true},
-                    {field: 'deptname', sort: true, width: 200, title: '部门名称'},
-                    {field: 'fdeptcode',
-                        sort: true, width: 200,
-                        title: '上级部门名称',
+                    {field: 'deptno', title: '部门代码', sort: true},
+                    {field: 'deptname', title: '部门名称', sort: true},
+                    {
+                        field: 'fdeptcode',
+                        title: '上级部门',
+                        sort: true,
+
+                        align: 'center',
                         templet: function (item) {
-                            if (item.fdeptcode == '0') {
-                                return '根部门';
-                            }  else {
-                                return deptlist[item.deptcode];
+                            for(var i=0 ;i<dplist.length;i++){
+                                if(item.fdeptcode==dplist[i].deptcode){
+                                    return dplist[i].deptname;
+                                }
                             }
 
-                            // return areaList.get(item.id);
-                        }},
-                    {field: 'ename', sort: true, width: 200, title: '部门英语名称'},
-                    {field: 'lastsaved', sort: true, width: 170, title: '保存时间'},
-
+                            return item.deptno;
+                        }
+                    },
+                    {field: 'lastsaved', title: '修改日期', sort: true},
 
                     {
-                        field: 'id', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
-                            return ' <a class="layui-btn  layui-btn-xs" lay-event="dept-edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> '+
-                                ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="dept-del"><i class="layui-icon layui-icon-delete"></i>删除</a>';;
+                        field: 'deptcode', align: 'center',width:160, title: '操作', fixed: 'right', templet: function (item) {
+                            return ' <a class="layui-btn  layui-btn-xs" lay-event="dept-edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ' +
+                                ' <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="dept-del"><i class="layui-icon layui-icon-delete"></i>删除</a>'
                         }
                     }
                 ]
@@ -70,37 +67,23 @@
         });
         // 搜索按钮点击事件
         $('#dept-btn-search').click(function () {
-            let key = $('#dept-search-value').val().trim();
+            let key = $('#dept-search-value').val();
             table.reload('dept-table', {where: {searchkey: key}, page: {curr: 1}});
         });
         $('#dept-btn-add').click(function () {
-            showDeptModel();
+            showModel();
         });
-        $('#dept-btn-import').click(function () {
-            showDownload();
-        });
-        let showDownload = function () {
-            let title ='导入';
+        let showModel = function (data) {
+            let title = data ? '修改客户部门' : '添加客户部门';
+            admin.putTempData('t_ct', data);
             admin.popupCenter({
                 title: title,
-                path: '[[@{/dept/loadimport}]]',
+                path: '[[@{/dept/loaddeptadd}]]',
                 finish: function () {
                     table.reload('dept-table', {});
                 }
             });
         };
-        let showDeptModel = function (data) {
-            let title = data ? '修改部门' : '添加部门';
-            admin.putTempData('t_dev', data);
-            admin.popupCenter({
-                title: title,
-                path: '[[@{/dept/loadadd}]]',
-                finish: function () {
-                    table.reload('dept-table', {});
-                }
-            });
-        };
-
 
         // 工具条点击事件
         table.on('tool(dept-table)', function (obj) {
@@ -108,18 +91,22 @@
             let layEvent = obj.event;
             console.log(data);
             if (layEvent === 'dept-edit') {
-                showDeptModel(data);
-            }else if (layEvent === 'dept-del') {
-                showDeptDelete(data);
+                showModel(data);
+            } else if (layEvent === 'dept-del') {
+                showDelete(data);
             }
         });
-        let showDeptDelete = function (data) {
+        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);
                 let token = $("meta[name='_csrf_token']").attr("value");
-                admin.go('[[@{/dept/delete}]]', {
-                    deptno: data.deptno,
+                admin.go('[[@{/dept/deletedept}]]', {
+                    deptcode: data.deptcode,
                     _csrf: token
                 }, function (data) {
                     console.log(data.code);
@@ -141,8 +128,6 @@
                     layer.msg('请求失败了,请稍后再试', {icon: 2});
                 });
             });
-        };
-
-
+        }
     });
 </script>