diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 287dde0..2def5f1 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -8,7 +8,8 @@
 #logging.level.org.hibernate.SQL=DEBUG
 # Postgresql settings
 spring.datasource.platform=postgresql
-spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restauranttest
+#spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restauranttest
+spring.datasource.url=jdbc:postgresql://172.28.201.101:25432/restauranttest
 spring.datasource.username=payapi
 spring.datasource.password=123456
 database.dbtype=postgresql
diff --git a/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java b/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
index 7322f57..dd01d04 100644
--- a/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
+++ b/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
@@ -45,9 +45,14 @@
             logger.info("业务参数appid或secret未配置");
             return;
         }
-        ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
-        helper.login(appid.getParaval(), secret.getParaval());
-        logger.info("登录成功");
+        try{
+            ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+            helper.login(appid.getParaval(), secret.getParaval());
+            logger.info("登录成功");
+        }catch (Exception e){
+            logger.error("登录失败");
+        }
+
     }
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
index c5808eb..fa12126 100644
--- a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
@@ -57,7 +57,7 @@
     @Autowired
     private BusinessparaDao businessparaDao;
     @Autowired
-    private DiscountRuleDao discountRuleDao;
+    private WhitelistService whitelistService;
     @Autowired
     private DeviceDiscountRuleService deviceDiscountRuleService;
     @Autowired
@@ -68,6 +68,7 @@
     private ConsumePropxy consumePropxy;
 
 
+
     @Override
     public PosPayLoginResp doLogin(PosPayLoginReq req) {
         PosPayLoginResp resp = new PosPayLoginResp();
@@ -463,26 +464,22 @@
     public PosPayWhitelistResp doGetWhitelist(PosPayWhitelistReq req) {
         PosPayWhitelistResp resp = new PosPayWhitelistResp();
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (null == device) {
-            resp.setRetcode(ErrorCode.E_DB_QRY);
-            resp.setRetmsg("设备物理ID不存在");
-            return resp;
-
-        }
-        if (device.getState() != 1) {
-            resp.setRetcode(ErrorCode.ERRIF_OTHER);
-            resp.setRetmsg("设备状态错误");
-            return resp;
-        }
+        if (checkDevice(resp, device)) return resp;
         device.setCardverno(req.getCardverno());
         deviceService.saveDevice(device);
-
         ArrayList<CardverBean> cardverFlags = new ArrayList<CardverBean>();
         String maxCardverno = cardService.getMaxCarcver();
         Integer count = req.getMaxcount();
-        List<TCardver> blacklistCards = cardService.getCardlistByTCardVer(req.getCardverno());
-        System.out.println("blacksize+++" + blacklistCards.size());
-        if (null == blacklistCards || blacklistCards.size() < 1) {
+        List<TCardver> whitelistCards ;
+        TWhitelistDevbind bind=whitelistService.getWhitelistDevbindByDeviceId(device.getId());
+
+        if(null!=bind){
+            whitelistCards=whitelistService.getDevBindCardver(device.getId());
+        }else{
+            whitelistCards= cardService.getCardlistByTCardVer(req.getCardverno());
+        }
+
+        if (null == whitelistCards || whitelistCards.size() < 1) {
             resp.setCardverno(maxCardverno);
             resp.setRetcode(ErrorCode.ERRIF_OK);
             resp.setRetmsg("下载成功");
@@ -491,12 +488,11 @@
             return resp;
         }
 
-        if (blacklistCards.size() < count) {
-
-            count = blacklistCards.size();
+        if (whitelistCards.size() < count) {
+            count = whitelistCards.size();
         }
         for (int i = 0; i < count; i++) {
-            TCardver cardver = blacklistCards.get(i);
+            TCardver cardver = whitelistCards.get(i);
             CardverBean cardverFlag = new CardverBean();
             cardverFlag.setCardno(cardver.getCardno());
             cardverFlag.setCardphyid(cardver.getCardphyid());
@@ -514,20 +510,30 @@
         return resp;
     }
 
-    @Override
-    public PosPayHeartBeatResp posHeartBeat(PosPayHeartBeatReq req) {
-        PosPayHeartBeatResp resp = new PosPayHeartBeatResp();
-        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+    private boolean checkDevice(APIResp resp, TDevice device) {
         if (null == device) {
             resp.setRetcode(ErrorCode.E_DB_QRY);
             resp.setRetmsg("设备物理ID不存在");
-            return resp;
+            return true;
         }
         if (device.getState() != 1) {
             resp.setRetcode(ErrorCode.ERRIF_OTHER);
             resp.setRetmsg("设备状态错误");
-            return resp;
+            return true;
         }
+        if(!RestaurantConstant.STATUS_CHECKSTATUS_NORMAL.equals(device.getCheckstatus())){
+            resp.setRetcode(ErrorCode.ERRIF_OTHER);
+            resp.setRetmsg("设备审核未通过");
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public PosPayHeartBeatResp posHeartBeat(PosPayHeartBeatReq req) {
+        PosPayHeartBeatResp resp = new PosPayHeartBeatResp();
+        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        if (checkDevice(resp, device)) return resp;
         String datetime = DateUtil.getNow("yyyyMMddHHmmss");
 
         device.setCardverno(req.getCardverno());
@@ -556,17 +562,7 @@
     public PosPayQuerysalesResp posQuerySales(PosPaySysparaReq req) {
         PosPayQuerysalesResp resp=new PosPayQuerysalesResp();
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (null == device) {
-            resp.setRetcode(ErrorCode.E_DB_QRY);
-            resp.setRetmsg("设备物理ID不存在");
-            return resp;
-
-        }
-        if (device.getState() != 1) {
-            resp.setRetcode(ErrorCode.ERRIF_OTHER);
-            resp.setRetmsg("设备状态错误");
-            return resp;
-        }
+        if (checkDevice(resp, device)) return resp;
 
         SalesAmtBean salesAmtBean=transDtlService.getSalesToday(req.getTermdate(),device.getId());
         ManageFeeAmtBean feeAmtBean=transDtlService.getManageFeeToday(req.getTermdate(),device.getId());
@@ -587,17 +583,7 @@
         PosPayAccqueryResp resp=new PosPayAccqueryResp();
 
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (null == device) {
-            resp.setRetcode(ErrorCode.E_DB_QRY);
-            resp.setRetmsg("设备物理ID不存在");
-            return resp;
-
-        }
-        if (device.getState() != 1) {
-            resp.setRetcode(ErrorCode.ERRIF_OTHER);
-            resp.setRetmsg("设备状态错误");
-            return resp;
-        }
+        if (checkDevice(resp, device)) return resp;
 
         TCard card=cardService.getCardByCardnoAndCardphyid(req.getCardno(),req.getCardphyid());
 
@@ -759,17 +745,7 @@
     public PosPayGolbalParamResp getBusinessParam(PosPayGolbalParamReq req) {
         PosPayGolbalParamResp resp=new PosPayGolbalParamResp();
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (null == device) {
-            resp.setRetcode(ErrorCode.E_DB_QRY);
-            resp.setRetmsg("设备物理ID不存在");
-            return resp;
-
-        }
-        if (device.getState() != 1) {
-            resp.setRetcode(ErrorCode.ERRIF_OTHER);
-            resp.setRetmsg("设备状态错误");
-            return resp;
-        }
+        if (checkDevice(resp, device)) return resp;
         TBusinesspara url=businessparaDao.findByParakey("upgrade_url");
         TBusinesspara version=businessparaDao.findByParakey("upgrade_version");
         if(null==url||null==version){
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CardverWhitelistBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CardverWhitelistBean.java
new file mode 100644
index 0000000..7947635
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CardverWhitelistBean.java
@@ -0,0 +1,24 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+
+
+public class CardverWhitelistBean {
+    private String cardphyid;
+    private String cardno;
+
+    public String getCardphyid() {
+        return cardphyid;
+    }
+
+    public void setCardphyid(String cardphyid) {
+        this.cardphyid = cardphyid;
+    }
+
+    public String getCardno() {
+        return cardno;
+    }
+
+    public void setCardno(String cardno) {
+        this.cardno = cardno;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeviceSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeviceSearchBean.java
index d9985c0..99f6d2d 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeviceSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DeviceSearchBean.java
@@ -8,6 +8,15 @@
     private String factoryid;
     private Integer devgroupid;
     private String devphyid;
+    private String checkstatus;
+
+    public String getCheckstatus() {
+        return checkstatus;
+    }
+
+    public void setCheckstatus(String checkstatus) {
+        this.checkstatus = checkstatus;
+    }
 
     public String getDevphyid() {
         return devphyid;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistBindBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistBindBean.java
new file mode 100644
index 0000000..b51a604
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistBindBean.java
@@ -0,0 +1,23 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+public class WhitelistBindBean {
+  private String cardno;
+  private String cardphyid;
+
+
+  public String getCardno() {
+    return cardno;
+  }
+
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
+
+  public String getCardphyid() {
+    return cardphyid;
+  }
+
+  public void setCardphyid(String cardphyid) {
+    this.cardphyid = cardphyid;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistBindShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistBindShowBean.java
new file mode 100644
index 0000000..e9da88c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistBindShowBean.java
@@ -0,0 +1,77 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+public class WhitelistBindShowBean {
+  private String id;
+  private Integer deviceid;
+  private String devicename;
+  private String devphyid;
+  private Integer whitelistid;
+  private String listname;
+  private String liststatus;
+  private String createtime;
+
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public Integer getDeviceid() {
+    return deviceid;
+  }
+
+  public void setDeviceid(Integer deviceid) {
+    this.deviceid = deviceid;
+  }
+
+  public String getDevicename() {
+    return devicename;
+  }
+
+  public void setDevicename(String devicename) {
+    this.devicename = devicename;
+  }
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
+
+  public Integer getWhitelistid() {
+    return whitelistid;
+  }
+
+  public void setWhitelistid(Integer whitelistid) {
+    this.whitelistid = whitelistid;
+  }
+
+  public String getListname() {
+    return listname;
+  }
+
+  public void setListname(String listname) {
+    this.listname = listname;
+  }
+
+  public String getListstatus() {
+    return liststatus;
+  }
+
+  public void setListstatus(String liststatus) {
+    this.liststatus = liststatus;
+  }
+
+  public String getCreatetime() {
+    return createtime;
+  }
+
+  public void setCreatetime(String createtime) {
+    this.createtime = createtime;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistShowBean.java
new file mode 100644
index 0000000..581ff0f
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/WhitelistShowBean.java
@@ -0,0 +1,41 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+public class WhitelistShowBean {
+  private Integer whitelistid;
+  private String listname;
+  private String status;
+  private String remark;
+
+
+  public Integer getWhitelistid() {
+    return whitelistid;
+  }
+
+  public void setWhitelistid(Integer whitelistid) {
+    this.whitelistid = whitelistid;
+  }
+
+  public String getListname() {
+    return listname;
+  }
+
+  public void setListname(String listname) {
+    this.listname = listname;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceCheckController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceCheckController.java
new file mode 100644
index 0000000..8068f11
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceCheckController.java
@@ -0,0 +1,85 @@
+package com.supwisdom.dlpay.restaurant.controller;
+
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.exception.WebCheckException;
+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.DeviceSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TDevice;
+import com.supwisdom.dlpay.restaurant.service.DeviceService;
+import com.supwisdom.dlpay.restaurant.service.ShopSettlementService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Controller
+@RequestMapping("/devicecheck")
+public class DeviceCheckController {
+
+    @Autowired
+    private DeviceService deviceService;
+    @Autowired
+    private ShopSettlementService shopSettlementService;
+
+    @RequestMapping("/index")
+    public String indexView(ModelMap model) {
+
+        return "restaurant/devicecheck/index";
+    }
+
+    @RequestMapping("/list")
+    @PreAuthorize("hasPermission('/devicecheck/index','')")
+    @ResponseBody
+    public PageResult<TDevice> getDataList(@RequestParam("page") Integer pageNo,
+                                         @RequestParam("limit") Integer pageSize,
+                                         @RequestParam(value = "status", required = false) String status) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            DeviceSearchBean searchBean = new DeviceSearchBean();
+            searchBean.setPageNo(pageNo);
+            searchBean.setCheckstatus(status);
+            searchBean.setPageSize(pageSize);
+            return deviceService.getDeviceByParam(searchBean);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+
+    @PostMapping("/docheckdevice")
+    @PreAuthorize("hasPermission('/devicecheck/docheckdevice','')")
+    @ResponseBody
+    public JsonResult doCheckDevice(@RequestParam("status") String status,
+                            @RequestParam("datalist[]") List<Integer> deviceIds,
+                            @AuthenticationPrincipal UserDetails operUser ) {
+        if (StringUtil.isEmpty(status)) {
+            return JsonResult.error("参数传递失败");
+        }
+        if(deviceIds.size()<0){
+            return JsonResult.error("设备数量不能小余0");
+        }
+        try {
+            if(deviceService.doCheckdevice(status,deviceIds,operUser)){
+                return JsonResult.ok("审核成功");
+            }else{
+                return JsonResult.error("审核失败");
+            }
+
+        }catch (WebCheckException ex){
+            return JsonResult.error(ex.getMessage());
+        }
+
+    }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
index 0bcf9dc..6bfbef1 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
@@ -3,6 +3,7 @@
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.framework.domain.TShopSettlement;
+import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
 import com.supwisdom.dlpay.restaurant.domain.TDevice;
 import com.supwisdom.dlpay.restaurant.service.DeviceService;
@@ -71,6 +72,7 @@
     @ResponseBody
     public JsonResult add(@RequestBody TDevice device) {
         if (device != null) {
+
             return deviceService.saveDevice(device);
         } else {
             return JsonResult.error("添加失败");
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
index ac610bf..7003cb4 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
@@ -28,381 +28,380 @@
 
 @Controller
 public class DeviceDiscountRuleController {
-  @Autowired
-  private DeviceDiscountRuleService deviceDiscountRuleService;
-  @Autowired
-  private DeviceParamService deviceParamService;
+    @Autowired
+    private DeviceDiscountRuleService deviceDiscountRuleService;
+    @Autowired
+    private DeviceParamService deviceParamService;
 
-  @GetMapping("/discountrule/index")
-  public String DiscountRuleView() {
-    return "restaurant/discountrule/rule";
-  }
-
-  @GetMapping("/discountrule/rulelist")
-  @PreAuthorize("hasPermission('/discountrule/index','')")
-  @ResponseBody
-  public PageResult<DiscountRuleShowBean> searchDiscountRules(@RequestParam("page") Integer pageNo,
-                                                              @RequestParam("limit") Integer pageSize,
-                                                              @RequestParam(value = "rulename", required = false) String rulename,
-                                                              @RequestParam(value = "ruletype", required = false) String ruletype) {
-    try {
-      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
-      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
-      return deviceDiscountRuleService.getDiscountRuleInfos(rulename, ruletype, pageNo, pageSize);
-    } catch (Exception e) {
-      e.printStackTrace();
-      return new PageResult<>(99, "系统查询错误");
-    }
-  }
-
-  @PostMapping("/discountrule/deleterule")
-  @PreAuthorize("hasPermission('/discountrule/deleterule','')")
-  @ResponseBody
-  public JsonResult deleteDiscountRule(@RequestParam("ruleid") Integer ruleid) {
-    try {
-      if (null == ruleid) {
-        return JsonResult.error("参数传递错误");
-      }
-      if (deviceDiscountRuleService.deleteDiscountRule(ruleid)) {
-        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);
-    }
-  }
-
-  @PostMapping("/discountrule/closerule")
-  @PreAuthorize("hasPermission('/discountrule/closerule','')")
-  @ResponseBody
-  public JsonResult closeDiscountRule(@RequestParam("ruleid") Integer ruleid) {
-    try {
-      if (null == ruleid) {
-        return JsonResult.error("参数传递错误");
-      }
-      if (deviceDiscountRuleService.closeDiscountRule(ruleid)) {
-        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("/discountrule/load4addrule")
-  @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
-  public String load4addDiscountRule() {
-    return "restaurant/discountrule/ruleform";
-  }
-
-  @GetMapping("/discountrule/checkrulename")
-  @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
-  @ResponseBody
-  public JsonResult checkRulename(@RequestParam("rulename") String rulename,
-                                  @RequestParam(value = "ruleid", required = false) Integer ruleid) {
-    try {
-      if (StringUtil.isEmpty(rulename)) {
-        return JsonResult.error("餐补规则名称不能为空");
-      }
-      if (deviceDiscountRuleService.checkDiscountRulenameExist(rulename.trim(), ruleid)) {
-        return JsonResult.error("餐补规则名称已存在");
-      } else {
-        return JsonResult.ok("success");
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      return JsonResult.error("系统处理异常").put("exception", e);
-    }
-  }
-
-  @PostMapping("/discountrule/addrule")
-  @PreAuthorize("hasPermission('/discountrule/addrule','')")
-  @ResponseBody
-  public JsonResult editDiscountRule(@RequestParam("rulename") String rulename,
-                                     @RequestParam("ruletype") String ruletype,
-                                     @RequestParam("starttime") String starttime,
-                                     @RequestParam("endtime") String endtime,
-                                     @RequestParam("amount") String amount,
-                                     @RequestParam("limitcnt") Integer limitcnt,
-                                     @RequestParam(value = "file", required = false) MultipartFile file,
-                                     @AuthenticationPrincipal UserDetails operUser) {
-    try {
-      if (StringUtil.isEmpty(rulename)
-          || (!RestaurantConstant.RULETYPE_QUOTA.equals(ruletype) && !RestaurantConstant.RULETYPE_REDUCTION.equals(ruletype)&& !RestaurantConstant.RULETYPE_DISCOUNT.equals(ruletype))
-          || !DateUtil.checkDatetimeValid(starttime, "HH:mm")
-          || !DateUtil.checkDatetimeValid(endtime, "HH:mm")
-          || !NumberUtil.isAmount(amount) || null == limitcnt) {
-        return JsonResult.error("参数传递错误");
-      } else if (DateUtil.compareDatetime(endtime, starttime, "HH:mm") <= 0) {
-        return JsonResult.error("时间范围错误，结束时间必须必起始时间大");
-      } else if (Double.valueOf(amount) < 0) {
-        return JsonResult.error("金额不能为负");
-      } else if (limitcnt < 1) {
-        return JsonResult.error("使用次数必须大于零");
-      } else if(null == file){
-        return JsonResult.error("请选择餐补名单");
-      }
-
-      TOperator oper = (TOperator) operUser;
-      if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
-        return JsonResult.error("登录过期，请重新登录");
-      }
-
-      if (deviceDiscountRuleService.saveNewDiscountRule(rulename.trim(), ruletype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime), Double.parseDouble(amount), limitcnt, file, oper)) {
-        return JsonResult.ok("新增成功");
-      } else {
-        return JsonResult.error("新增失败");
-      }
-    } catch (WebCheckException ex) {
-      return JsonResult.ok(599, ex.getMessage());
-    } catch (Exception e) {
-      e.printStackTrace();
-      return JsonResult.error("系统处理异常").put("exception", e);
-    }
-  }
-
-
-  @GetMapping("/discountrule/downloadexcel")
-  @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
-  @ResponseBody
-  public void downloadDiscountRuleExcel(HttpServletRequest request, HttpServletResponse response) {
-    try {
-      String[] title = {"市民卡号", "姓名"}; //表头
-      String[][] infos = {{"19045632", "张三"}}; // 示例内容
-      ExportExcel.queryexcel("餐补名单模板", title, infos, request, response);
-    } catch (Exception e) {
-      e.printStackTrace();
-    }
-  }
-
-  @GetMapping("/discountrule/load4detail")
-  public String load4DiscountRuleDetails(@RequestParam("ruleid") Integer ruleid, Model model) {
-    model.addAttribute("detailRuleid", ruleid);
-    return "restaurant/discountrule/ruledetail";
-  }
-
-  @GetMapping("/discountrule/load4detaillist")
-  @PreAuthorize("hasPermission('/discountrule/load4detail','')")
-  @ResponseBody
-  public PageResult<TDiscountDetail> searchDiscountRules(@RequestParam("page") Integer pageNo,
-                                                         @RequestParam("limit") Integer pageSize,
-                                                         @RequestParam("ruleid") Integer ruleid,
-                                                         @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;
-      return deviceDiscountRuleService.getDiscountRuleDetails(searchkey, ruleid, pageNo, pageSize);
-    } catch (Exception e) {
-      e.printStackTrace();
-      return new PageResult<>(99, "系统查询错误");
-    }
-  }
-
-
-  /**
-   * ====================================================
-   * 餐补规则审核
-   * ====================================================
-   */
-  @GetMapping("/discountrule/check")
-  public String checkDiscountRulesView() {
-    return "restaurant/discountrule/rulecheck";
-  }
-
-  @GetMapping("/discountrule/checklist")
-  @PreAuthorize("hasPermission('/discountrule/check','')")
-  @ResponseBody
-  public PageResult<DiscountRuleShowBean> searchCheckDiscountRules(@RequestParam("page") Integer pageNo,
-                                                                   @RequestParam("limit") Integer pageSize,
-                                                                   @RequestParam(value = "status", required = false) String status) {
-    try {
-      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
-      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
-      return deviceDiscountRuleService.getCheckDiscountRuleInfos(status, pageNo, pageSize);
-    } catch (Exception e) {
-      e.printStackTrace();
-      return new PageResult<>(99, "系统查询错误");
-    }
-  }
-
-  @GetMapping("/discountrule/load4checkdetail")
-  @PreAuthorize("hasPermission('/discountrule/load4checkdetail','')")
-  public String load4DiscountRuleCheckDetails(@RequestParam("ruleid") Integer ruleid, Model model) {
-    model.addAttribute("checkDetailRuleid", ruleid);
-    return "restaurant/discountrule/checkdetail";
-  }
-
-  @GetMapping("/discountrule/load4checkdetaillist")
-  @PreAuthorize("hasPermission('/discountrule/load4checkdetail','')")
-  @ResponseBody
-  public PageResult<TDiscountDetail> searchDiscountRulesCheckDetails(@RequestParam("page") Integer pageNo,
-                                                         @RequestParam("limit") Integer pageSize,
-                                                         @RequestParam("ruleid") Integer ruleid,
-                                                         @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;
-      return deviceDiscountRuleService.getDiscountRuleDetails(searchkey, ruleid, pageNo, pageSize);
-    } catch (Exception e) {
-      e.printStackTrace();
-      return new PageResult<>(99, "系统查询错误");
-    }
-  }
-
-  @PostMapping("/discountrule/checkruledetail")
-  @PreAuthorize("hasPermission('/discountrule/checkruledetail','')")
-  @ResponseBody
-  public JsonResult editDiscountRule(@RequestParam("ruleid") Integer ruleid,
-                                     @RequestParam("checktype") String checktype,
-                                     @RequestParam("reason") String reason,
-                                     @AuthenticationPrincipal UserDetails operUser) {
-    try {
-      if (null == ruleid || (!"pass".equals(checktype) && !"reject".equals(checktype))) {
-        return JsonResult.error("参数传递错误");
-      } else if ("reject".equals(checktype) && StringUtil.isEmpty(reason)) {
-        return JsonResult.error("请填写驳回原因");
-      }
-
-      TOperator oper = (TOperator) operUser;
-      if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
-        return JsonResult.error("登录过期，请重新登录");
-      }
-
-      if (deviceDiscountRuleService.doCheckDiscountRule(ruleid, "pass".equals(checktype), reason, oper)) {
-        return JsonResult.ok("pass".equals(checktype) ? "审核通过" : "驳回成功");
-      } else {
-        return JsonResult.error("操作失败");
-      }
-
-    } catch (WebCheckException ex) {
-      return JsonResult.error(ex.getMessage());
-    } catch (Exception e) {
-      e.printStackTrace();
-      return JsonResult.error("系统处理异常").put("exception", e);
+    @GetMapping("/discountrule/index")
+    public String DiscountRuleView() {
+        return "restaurant/discountrule/rule";
     }
 
-  }
-
-  /**
-   * ====================================================
-   * 餐补规则绑定设备
-   * ====================================================
-   */
-  @GetMapping("/discountrule/devbind")
-  public String bindDiscountRuleView() {
-    return "restaurant/discountrule/ruledevbind";
-  }
-
-  @GetMapping("/discountrule/devbindlist")
-  @PreAuthorize("hasPermission('/discountrule/devbind','')")
-  @ResponseBody
-  public PageResult<DiscountRuleBindShowBean> searchDiscountDevbindInfo(@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;
-      return deviceDiscountRuleService.getDiscountRuleDevBindInfo(searchkey, pageNo, pageSize);
-    } catch (Exception e) {
-      e.printStackTrace();
-      return new PageResult<>(99, "系统查询错误");
+    @GetMapping("/discountrule/rulelist")
+    @PreAuthorize("hasPermission('/discountrule/index','')")
+    @ResponseBody
+    public PageResult<DiscountRuleShowBean> searchDiscountRules(@RequestParam("page") Integer pageNo,
+                                                                @RequestParam("limit") Integer pageSize,
+                                                                @RequestParam(value = "rulename", required = false) String rulename,
+                                                                @RequestParam(value = "ruletype", required = false) String ruletype) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            return deviceDiscountRuleService.getDiscountRuleInfos(rulename, ruletype, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
     }
-  }
 
-  @PostMapping("/discountrule/deletedevbind")
-  @PreAuthorize("hasPermission('/discountrule/deletedevbind','')")
-  @ResponseBody
-  public JsonResult deleteDiscountDevbind(@RequestParam("id") String id) {
-    try {
-      TDiscountDevbind bind = deviceDiscountRuleService.getDiscountDevbindById(id);
-      if (null == bind) {
-        return JsonResult.error("绑定关系不存在！");
-      }
-
-      if (deviceDiscountRuleService.deleteDiscountDevbind(bind)) {
-        return JsonResult.ok("删除成功");
-      } else {
-        return JsonResult.error("删除失败");
-      }
-    } catch (Exception e) {
-      e.printStackTrace();
-      return JsonResult.error("系统处理异常").put("exception", e);
+    @PostMapping("/discountrule/deleterule")
+    @PreAuthorize("hasPermission('/discountrule/deleterule','')")
+    @ResponseBody
+    public JsonResult deleteDiscountRule(@RequestParam("ruleid") Integer ruleid) {
+        try {
+            if (null == ruleid) {
+                return JsonResult.error("参数传递错误");
+            }
+            if (deviceDiscountRuleService.deleteDiscountRule(ruleid)) {
+                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("/discountrule/load4binddev")
-  @PreAuthorize("hasPermission('/discountrule/load4binddev','')")
-  public String load4RuleBindDevice(Model model) {
-    model.addAttribute("rulelist", deviceDiscountRuleService.getNormalDiscountRules());
-    return "restaurant/discountrule/rulebind";
-  }
-
-  @GetMapping("/discountrule/devsearch")
-  @PreAuthorize("hasPermission('/discountrule/load4binddev','')")
-  @ResponseBody
-  public PageResult<DevparaBinddevShowBean> searchRuleBindDevices(@RequestParam(value = "devgroupid", required = false) Integer devgroupid,
-                                                                  @RequestParam(value = "searchkey", required = false) String searchkey,
-                                                                  @RequestParam(value = "ruleid", required = false) Integer ruleid){
-    try {
-      if (null == ruleid && null == devgroupid && StringUtil.isEmpty(searchkey)) {
-        return new PageResult<>(99, "请填写条件查询设备");
-      }else if(null==ruleid){
-        return new PageResult<>(99, "请选择餐补规则");
-      }
-
-      return deviceDiscountRuleService.searchRuleBindDevices(devgroupid, searchkey, ruleid);
-    } catch (Exception e) {
-      e.printStackTrace();
-      return new PageResult<>(99, "系统查询错误");
+    @PostMapping("/discountrule/closerule")
+    @PreAuthorize("hasPermission('/discountrule/closerule','')")
+    @ResponseBody
+    public JsonResult closeDiscountRule(@RequestParam("ruleid") Integer ruleid) {
+        try {
+            if (null == ruleid) {
+                return JsonResult.error("参数传递错误");
+            }
+            if (deviceDiscountRuleService.closeDiscountRule(ruleid)) {
+                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("/discountrule/devgrouptree")
-  @PreAuthorize("hasPermission('/discountrule/load4binddev','')")
-  @ResponseBody
-  public List<TreeSelectNode> searchDevgroupTree() {
-    List<TreeSelectNode> tree = deviceParamService.getDeviceGroupSelectTree();
-    return tree;
-  }
 
-  @PostMapping("/discountrule/dorulebinddev")
-  @PreAuthorize("hasPermission('/discountrule/dorulebinddev','')")
-  @ResponseBody
-  public JsonResult doBindRuleDevices(@RequestParam("ruleid") Integer ruleid,
-                                      @RequestParam("deviceid[]") List<Integer> deviceIds,
-                                      @AuthenticationPrincipal UserDetails operUser) {
-    try {
-      if (null == ruleid || StringUtil.isEmpty(deviceIds)) {
-        return JsonResult.error("参数传递错误");
-      }
-
-      TOperator oper = (TOperator) operUser;
-      if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
-        return JsonResult.error("登录过期，请重新登录");
-      }
-
-      if (deviceDiscountRuleService.saveRuleBindDevices(ruleid, deviceIds, oper)) {
-        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("/discountrule/load4addrule")
+    @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
+    public String load4addDiscountRule() {
+        return "restaurant/discountrule/ruleform";
     }
-  }
+
+    @GetMapping("/discountrule/checkrulename")
+    @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
+    @ResponseBody
+    public JsonResult checkRulename(@RequestParam("rulename") String rulename,
+                                    @RequestParam(value = "ruleid", required = false) Integer ruleid) {
+        try {
+            if (StringUtil.isEmpty(rulename)) {
+                return JsonResult.error("餐补规则名称不能为空");
+            }
+            if (deviceDiscountRuleService.checkDiscountRulenameExist(rulename.trim(), ruleid)) {
+                return JsonResult.error("餐补规则名称已存在");
+            } else {
+                return JsonResult.ok("success");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+    }
+
+    @PostMapping("/discountrule/addrule")
+    @PreAuthorize("hasPermission('/discountrule/addrule','')")
+    @ResponseBody
+    public JsonResult editDiscountRule(@RequestParam("rulename") String rulename,
+                                       @RequestParam("ruletype") String ruletype,
+                                       @RequestParam("starttime") String starttime,
+                                       @RequestParam("endtime") String endtime,
+                                       @RequestParam("amount") String amount,
+                                       @RequestParam("limitcnt") Integer limitcnt,
+                                       @RequestParam(value = "file", required = false) MultipartFile file,
+                                       @AuthenticationPrincipal UserDetails operUser) {
+        try {
+            if (StringUtil.isEmpty(rulename)
+                    || (!RestaurantConstant.RULETYPE_QUOTA.equals(ruletype) && !RestaurantConstant.RULETYPE_REDUCTION.equals(ruletype) && !RestaurantConstant.RULETYPE_DISCOUNT.equals(ruletype))
+                    || !DateUtil.checkDatetimeValid(starttime, "HH:mm")
+                    || !DateUtil.checkDatetimeValid(endtime, "HH:mm")
+                    || !NumberUtil.isAmount(amount) || null == limitcnt) {
+                return JsonResult.error("参数传递错误");
+            } else if (DateUtil.compareDatetime(endtime, starttime, "HH:mm") <= 0) {
+                return JsonResult.error("时间范围错误，结束时间必须必起始时间大");
+            } else if (Double.valueOf(amount) < 0) {
+                return JsonResult.error("金额不能为负");
+            } else if (limitcnt < 1) {
+                return JsonResult.error("使用次数必须大于零");
+            } else if (null == file) {
+                return JsonResult.error("请选择餐补名单");
+            }
+
+            TOperator oper = (TOperator) operUser;
+            if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
+                return JsonResult.error("登录过期，请重新登录");
+            }
+
+            if (deviceDiscountRuleService.saveNewDiscountRule(rulename.trim(), ruletype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime), Double.parseDouble(amount), limitcnt, file, oper)) {
+                return JsonResult.ok("新增成功");
+            } else {
+                return JsonResult.error("新增失败");
+            }
+        } catch (WebCheckException ex) {
+            return JsonResult.ok(599, ex.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+    }
+
+
+    @GetMapping("/discountrule/downloadexcel")
+    @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
+    @ResponseBody
+    public void downloadDiscountRuleExcel(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String[] title = {"市民卡号", "姓名"}; //表头
+            String[][] infos = {{"19045632", "张三"}}; // 示例内容
+            ExportExcel.queryexcel("导入名单模板", title, infos, request, response);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @GetMapping("/discountrule/load4detail")
+    public String load4DiscountRuleDetails(@RequestParam("ruleid") Integer ruleid, Model model) {
+        model.addAttribute("detailRuleid", ruleid);
+        return "restaurant/discountrule/ruledetail";
+    }
+
+    @GetMapping("/discountrule/load4detaillist")
+    @PreAuthorize("hasPermission('/discountrule/load4detail','')")
+    @ResponseBody
+    public PageResult<TDiscountDetail> searchDiscountRules(@RequestParam("page") Integer pageNo,
+                                                           @RequestParam("limit") Integer pageSize,
+                                                           @RequestParam("ruleid") Integer ruleid,
+                                                           @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;
+            return deviceDiscountRuleService.getDiscountRuleDetails(searchkey, ruleid, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+
+    /**
+     * ====================================================
+     * 餐补规则审核
+     * ====================================================
+     */
+    @GetMapping("/discountrule/check")
+    public String checkDiscountRulesView() {
+        return "restaurant/discountrule/rulecheck";
+    }
+
+    @GetMapping("/discountrule/checklist")
+    @PreAuthorize("hasPermission('/discountrule/check','')")
+    @ResponseBody
+    public PageResult<DiscountRuleShowBean> searchCheckDiscountRules(@RequestParam("page") Integer pageNo,
+                                                                     @RequestParam("limit") Integer pageSize,
+                                                                     @RequestParam(value = "status", required = false) String status) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            return deviceDiscountRuleService.getCheckDiscountRuleInfos(status, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/discountrule/load4checkdetail")
+    @PreAuthorize("hasPermission('/discountrule/load4checkdetail','')")
+    public String load4DiscountRuleCheckDetails(@RequestParam("ruleid") Integer ruleid, Model model) {
+        model.addAttribute("checkDetailRuleid", ruleid);
+        return "restaurant/discountrule/checkdetail";
+    }
+
+    @GetMapping("/discountrule/load4checkdetaillist")
+    @PreAuthorize("hasPermission('/discountrule/load4checkdetail','')")
+    @ResponseBody
+    public PageResult<TDiscountDetail> searchDiscountRulesCheckDetails(@RequestParam("page") Integer pageNo,
+                                                                       @RequestParam("limit") Integer pageSize,
+                                                                       @RequestParam("ruleid") Integer ruleid,
+                                                                       @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;
+            return deviceDiscountRuleService.getDiscountRuleDetails(searchkey, ruleid, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @PostMapping("/discountrule/checkruledetail")
+    @PreAuthorize("hasPermission('/discountrule/checkruledetail','')")
+    @ResponseBody
+    public JsonResult editDiscountRule(@RequestParam("ruleid") Integer ruleid,
+                                       @RequestParam("checktype") String checktype,
+                                       @RequestParam("reason") String reason,
+                                       @AuthenticationPrincipal UserDetails operUser) {
+        try {
+            if (null == ruleid || (!"pass".equals(checktype) && !"reject".equals(checktype))) {
+                return JsonResult.error("参数传递错误");
+            } else if ("reject".equals(checktype) && StringUtil.isEmpty(reason)) {
+                return JsonResult.error("请填写驳回原因");
+            }
+
+            TOperator oper = (TOperator) operUser;
+            if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
+                return JsonResult.error("登录过期，请重新登录");
+            }
+
+            if (deviceDiscountRuleService.doCheckDiscountRule(ruleid, "pass".equals(checktype), reason, oper)) {
+                return JsonResult.ok("pass".equals(checktype) ? "审核通过" : "驳回成功");
+            } else {
+                return JsonResult.error("操作失败");
+            }
+
+        } catch (WebCheckException ex) {
+            return JsonResult.error(ex.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+
+    }
+
+    /**
+     * ====================================================
+     * 餐补规则绑定设备
+     * ====================================================
+     */
+    @GetMapping("/discountrule/devbind")
+    public String bindDiscountRuleView() {
+        return "restaurant/discountrule/ruledevbind";
+    }
+
+    @GetMapping("/discountrule/devbindlist")
+    @PreAuthorize("hasPermission('/discountrule/devbind','')")
+    @ResponseBody
+    public PageResult<DiscountRuleBindShowBean> searchDiscountDevbindInfo(@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;
+            return deviceDiscountRuleService.getDiscountRuleDevBindInfo(searchkey, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @PostMapping("/discountrule/deletedevbind")
+    @PreAuthorize("hasPermission('/discountrule/deletedevbind','')")
+    @ResponseBody
+    public JsonResult deleteDiscountDevbind(@RequestParam("id") String id) {
+        try {
+            TDiscountDevbind bind = deviceDiscountRuleService.getDiscountDevbindById(id);
+            if (null == bind) {
+                return JsonResult.error("绑定关系不存在！");
+            }
+
+            if (deviceDiscountRuleService.deleteDiscountDevbind(bind)) {
+                return JsonResult.ok("删除成功");
+            } else {
+                return JsonResult.error("删除失败");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+    }
+
+    @GetMapping("/discountrule/load4binddev")
+    @PreAuthorize("hasPermission('/discountrule/load4binddev','')")
+    public String load4RuleBindDevice(Model model) {
+        model.addAttribute("rulelist", deviceDiscountRuleService.getNormalDiscountRules());
+        return "restaurant/discountrule/rulebind";
+    }
+
+    @GetMapping("/discountrule/devsearch")
+    @PreAuthorize("hasPermission('/discountrule/load4binddev','')")
+    @ResponseBody
+    public PageResult<DevparaBinddevShowBean> searchRuleBindDevices(@RequestParam(value = "devgroupid", required = false) Integer devgroupid,
+                                                                    @RequestParam(value = "searchkey", required = false) String searchkey,
+                                                                    @RequestParam(value = "ruleid", required = false) Integer ruleid) {
+        try {
+            if (null == ruleid && null == devgroupid && StringUtil.isEmpty(searchkey)) {
+                return new PageResult<>(99, "请填写条件查询设备");
+            } else if (null == ruleid) {
+                return new PageResult<>(99, "请选择餐补规则");
+            }
+
+            return deviceDiscountRuleService.searchRuleBindDevices(devgroupid, searchkey, ruleid);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/discountrule/devgrouptree")
+    @PreAuthorize("hasPermission('/discountrule/load4binddev','')")
+    @ResponseBody
+    public List<TreeSelectNode> searchDevgroupTree() {
+        List<TreeSelectNode> tree = deviceParamService.getDeviceGroupSelectTree();
+        return tree;
+    }
+
+    @PostMapping("/discountrule/dorulebinddev")
+    @PreAuthorize("hasPermission('/discountrule/dorulebinddev','')")
+    @ResponseBody
+    public JsonResult doBindRuleDevices(@RequestParam("ruleid") Integer ruleid,
+                                        @RequestParam("deviceid[]") List<Integer> deviceIds,
+                                        @AuthenticationPrincipal UserDetails operUser) {
+        try {
+            if (null == ruleid || StringUtil.isEmpty(deviceIds)) {
+                return JsonResult.error("参数传递错误");
+            }
+
+            TOperator oper = (TOperator) operUser;
+            if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
+                return JsonResult.error("登录过期，请重新登录");
+            }
+
+            if (deviceDiscountRuleService.saveRuleBindDevices(ruleid, deviceIds, oper)) {
+                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);
+        }
+    }
 
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceManageController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceManageController.java
index 1c39779..426c60e 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceManageController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceManageController.java
@@ -10,6 +10,7 @@
 import com.supwisdom.dlpay.restaurant.service.DeviceService;
 import com.supwisdom.dlpay.framework.util.ExportExcel;import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
@@ -67,6 +68,7 @@
             searchBean.setDevicename(devicename);
             searchBean.setFactoryid(factoryid);
             searchBean.setPageSize(pageSize);
+            searchBean.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_NORMAL);
             return deviceService.getDeviceByParam(searchBean);
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/WhitelistController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/WhitelistController.java
new file mode 100644
index 0000000..7325df8
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/WhitelistController.java
@@ -0,0 +1,358 @@
+package com.supwisdom.dlpay.restaurant.controller;
+
+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.*;
+import com.supwisdom.dlpay.restaurant.bean.WhitelistBindShowBean;
+import com.supwisdom.dlpay.restaurant.bean.DevparaBinddevShowBean;
+import com.supwisdom.dlpay.restaurant.domain.TWhitelist;
+import com.supwisdom.dlpay.restaurant.domain.TWhitelistDetail;
+import com.supwisdom.dlpay.restaurant.domain.TWhitelistDevbind;
+import com.supwisdom.dlpay.restaurant.service.WhitelistService;
+import com.supwisdom.dlpay.restaurant.service.DeviceParamService;
+import com.supwisdom.dlpay.system.bean.TreeSelectNode;
+import com.supwisdom.dlpay.system.service.ParamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+@Controller
+public class WhitelistController {
+    @Autowired
+    private WhitelistService whitelistService;
+    @Autowired
+    private DeviceParamService deviceParamService;
+
+
+    @GetMapping("/whitelist/index")
+    public String whitelistView() {
+        return "restaurant/whitelist/whitelist";
+    }
+
+    @GetMapping("/whitelist/list")
+    @PreAuthorize("hasPermission('/whitelist/index','')")
+    @ResponseBody
+    public PageResult<TWhitelist> searchwhitelists(@RequestParam("page") Integer pageNo,
+                                                      @RequestParam("limit") Integer pageSize,
+                                                      @RequestParam(value = "listname", required = false) String listname) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            return whitelistService.getWhitelist(listname, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @PostMapping("/whitelist/deletelist")
+    @ResponseBody
+    public JsonResult deletewhitelist(@RequestParam("whitelistid") Integer whitelistid) {
+        try {
+            if (null == whitelistid) {
+                return JsonResult.error("参数传递错误");
+            }
+            if (whitelistService.deleteWhitelist(whitelistid)) {
+                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("/whitelist/load4addwhitelist")
+    public String load4addwhitelist() {
+        return "restaurant/whitelist/whitelistform";
+    }
+
+
+
+    @PostMapping("/whitelist/addwhitelist")
+    @PreAuthorize("hasPermission('/whitelist/addwhitelist','')")
+    @ResponseBody
+    public JsonResult editwhitelist(@RequestParam("listname") String listname,
+                                       @RequestParam(value = "file", required = false) MultipartFile file,
+                                       @AuthenticationPrincipal UserDetails operUser) {
+        try {
+            if (StringUtil.isEmpty(listname)){
+                return JsonResult.error("参数传递错误");
+            }
+            if (null == file) {
+                return JsonResult.error("请选择餐补名单");
+            }
+
+
+            TOperator oper = (TOperator) operUser;
+            if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
+                return JsonResult.error("登录过期，请重新登录");
+            }
+
+            if (whitelistService.saveWhitelist(listname.trim(),  file, oper)) {
+                return JsonResult.ok("新增成功");
+            } else {
+                return JsonResult.error("新增失败");
+            }
+        } catch (WebCheckException ex) {
+            return JsonResult.ok(599, ex.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+    }
+
+    @GetMapping("/whitelist/load4detail")
+    public String load4whitelistDetails(@RequestParam("whitelistid") Integer whitelistid, Model model) {
+        model.addAttribute("whitelistDetailid", whitelistid);
+        return "restaurant/whitelist/whitelistdetail";
+    }
+
+    @GetMapping("/whitelist/load4detaillist")
+    @ResponseBody
+    public PageResult<TWhitelistDetail> searchwhitelists(@RequestParam("page") Integer pageNo,
+                                                            @RequestParam("limit") Integer pageSize,
+                                                            @RequestParam("whitelistid") Integer whitelistid,
+                                                            @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;
+            return whitelistService.getWhitelistDetails(searchkey, whitelistid, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+
+    @PostMapping("/whitelist/closelist")
+    @ResponseBody
+    public JsonResult closewhitelist(@RequestParam("whitelistid") Integer whitelistid) {
+        try {
+            if (null == whitelistid) {
+                return JsonResult.error("参数传递错误");
+            }
+            if (whitelistService.closeWhitelist(whitelistid)) {
+                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("/whitelistcheck/index")
+    public String checkwhitelistView() {
+        return "restaurant/whitelist/whitelistcheck";
+    }
+
+    @GetMapping("/whitelistcheck/checklist")
+    @PreAuthorize("hasPermission('/whitelistcheck/checklist','')")
+    @ResponseBody
+    public PageResult<TWhitelist> searchCheckwhitelists(@RequestParam("page") Integer pageNo,
+                                                                     @RequestParam("limit") Integer pageSize,
+                                                                     @RequestParam(value = "status", required = false) String status) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+            return whitelistService.getCheckWhitelist(status, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/whitelistcheck/load4checkdetail")
+    public String load4whitelistCheckDetails(@RequestParam("whitelistid") Integer whitelistid, Model model) {
+        model.addAttribute("checkDetailwhitelistid", whitelistid);
+        return "restaurant/whitelist/checkdetail";
+    }
+
+    @GetMapping("/whitelistcheck/load4checkdetaillist")
+    @PreAuthorize("hasPermission('/whitelistcheck/load4checkdetail','')")
+    @ResponseBody
+    public PageResult<TWhitelistDetail> searchwhitelistsCheckDetails(@RequestParam("page") Integer pageNo,
+                                                                       @RequestParam("limit") Integer pageSize,
+                                                                       @RequestParam("whitelistid") Integer whitelistid,
+                                                                       @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;
+            return whitelistService.getWhitelistDetails(searchkey, whitelistid, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @PostMapping("/whitelistcheck/checkdetail")
+    @ResponseBody
+    public JsonResult editwhitelist(@RequestParam("whitelistid") Integer whitelistid,
+                                       @RequestParam("checktype") String checktype,
+                                       @RequestParam("reason") String reason,
+                                       @AuthenticationPrincipal UserDetails operUser) {
+        try {
+            if (null == whitelistid || (!"pass".equals(checktype) && !"reject".equals(checktype))) {
+                return JsonResult.error("参数传递错误");
+            } else if ("reject".equals(checktype) && StringUtil.isEmpty(reason)) {
+                return JsonResult.error("请填写驳回原因");
+            }
+
+            TOperator oper = (TOperator) operUser;
+            if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
+                return JsonResult.error("登录过期，请重新登录");
+            }
+
+            if (whitelistService.doCheckWhitelist(whitelistid, "pass".equals(checktype), reason, oper)) {
+                return JsonResult.ok("pass".equals(checktype) ? "审核通过" : "驳回成功");
+            } else {
+                return JsonResult.error("操作失败");
+            }
+
+        } catch (WebCheckException ex) {
+            return JsonResult.error(ex.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+
+    }
+
+
+    /**
+     * ====================================================
+     * 白名单绑定设备
+     * ====================================================
+     */
+    @GetMapping("/whitelistbind/devbind")
+    public String bindwhitelistbindView() {
+        return "restaurant/whitelist/devbind";
+    }
+
+    @GetMapping("/whitelistbind/devbindlist")
+    @PreAuthorize("hasPermission('/whitelistbind/devbind','')")
+    @ResponseBody
+    public PageResult<WhitelistBindShowBean> searchwhitelistDevbindInfo(@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;
+            return whitelistService.getWhitelistDevBindInfo(searchkey, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @PostMapping("/whitelistbind/deletedevbind")
+    @ResponseBody
+    public JsonResult deletewhitelistDevbind(@RequestParam("id") String id) {
+        try {
+            TWhitelistDevbind bind = whitelistService.getWhitelistDevbindById(id);
+            if (null == bind) {
+                return JsonResult.error("绑定关系不存在！");
+            }
+
+            if (whitelistService.deleteWhitelistDevbind(bind)) {
+                return JsonResult.ok("删除成功");
+            } else {
+                return JsonResult.error("删除失败");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+    }
+
+    @GetMapping("/whitelistbind/load4binddev")
+    public String load4RuleBindDevice(Model model) {
+        model.addAttribute("whitelists", whitelistService.getNormalWhitelists());
+        return "restaurant/whitelist/whitelistbind";
+    }
+
+    @GetMapping("/whitelistbind/devsearch")
+    @ResponseBody
+    public PageResult<DevparaBinddevShowBean> searchwhitelistBindDevices(@RequestParam(value = "devgroupid", required = false) Integer devgroupid,
+                                                                         @RequestParam(value = "searchkey", required = false) String searchkey,
+                                                                         @RequestParam(value = "whitelistid", required = false) Integer whitelistid) {
+        try {
+            if (null == whitelistid && null == devgroupid && StringUtil.isEmpty(searchkey)) {
+                return new PageResult<>(99, "请填写条件查询设备");
+            } else if (null == whitelistid) {
+                return new PageResult<>(99, "请选择白名单");
+            }
+
+            return whitelistService.searchWhitelistBindDevices(devgroupid, searchkey, whitelistid);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/whitelistbind/devgrouptree")
+    @ResponseBody
+    public List<TreeSelectNode> searchDevgroupTree() {
+        List<TreeSelectNode> tree = deviceParamService.getDeviceGroupSelectTree();
+        return tree;
+    }
+
+    @PostMapping("/whitelistbind/dobinddev")
+    @PreAuthorize("hasPermission('/whitelistbind/dobinddev','')")
+    @ResponseBody
+    public JsonResult doBindRuleDevices(@RequestParam("whitelistid") Integer whitelistid,
+                                        @RequestParam("deviceid[]") List<Integer> deviceIds,
+                                        @AuthenticationPrincipal UserDetails operUser) {
+        try {
+            if (null == whitelistid || StringUtil.isEmpty(deviceIds)) {
+                return JsonResult.error("参数传递错误");
+            }
+
+            TOperator oper = (TOperator) operUser;
+            if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
+                return JsonResult.error("登录过期，请重新登录");
+            }
+
+
+            if (whitelistService.saveWhitelistBindDevices(whitelistid, deviceIds, oper)) {
+                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);
+        }
+    }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDao.java
new file mode 100644
index 0000000..34b9c1e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDao.java
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+
+import com.supwisdom.dlpay.restaurant.domain.TWhitelist;
+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;
+
+import java.util.List;
+
+@Repository
+public interface WhitelistDao extends JpaRepository<TWhitelist, Integer> {
+
+
+    Page<TWhitelist> findAllByListnameContaining(String name, Pageable pageable);
+
+    @Query("select count(t.whitelistid) from TWhitelist t where t.listname=?1 ")
+    long checkListnameExists(String listname);
+
+    Page<TWhitelist> findAllByStatus(String status, Pageable pageable);
+
+    List<TWhitelist> findAllByStatus(String status);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDetailDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDetailDao.java
new file mode 100644
index 0000000..a710163
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDetailDao.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TWhitelistDetail;
+import com.supwisdom.dlpay.restaurant.domain.TDiscountDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface WhitelistDetailDao extends JpaRepository<TWhitelistDetail, String>, JpaSpecificationExecutor<TDiscountDetail> {
+
+  @Modifying
+  @Query("delete from TWhitelistDetail where whitelistid=?1  ")
+  void deleteWhitelistDetailByWhitelistid(int Whitelistid);
+
+  @Modifying
+  @Query("update TWhitelistDetail t set t.status=?1 where t.whitelistid=?2 ")
+  void updateWhitelistDetailStatusByWhitelistid(String status, int Whitelistid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDevbindDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDevbindDao.java
new file mode 100644
index 0000000..e695e5f
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDevbindDao.java
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TWhitelistDevbind;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface WhitelistDevbindDao extends JpaRepository<TWhitelistDevbind, String> {
+
+  @Query("select count(t.id) from TWhitelistDevbind t where t.whitelistid=?1 ")
+  long getBindcntByWhitelistid(int whitelistid);
+
+
+  @Modifying
+  @Query("delete from TWhitelistDevbind where whitelistid=?1  ")
+  void deleteBindByWhitelistid(int whitelistid);
+
+  @Query("from TWhitelistDevbind where id=?1")
+  TWhitelistDevbind getWhitelistDevbindById(String id);
+
+  @Query("from TWhitelistDevbind where deviceid=?1")
+  TWhitelistDevbind findByDeviceid(Integer deviceid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevice.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevice.java
index 63d2ef4..ae2242e 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevice.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevice.java
@@ -20,7 +20,8 @@
     private Integer runstatus;
     private String lastlogintime;
     private String lastbeattime;
-
+    private String checkstatus;
+    private String checkername;
 
 
     @Id
@@ -158,6 +159,27 @@
     }
 
     public void setLastbeattime(String lastbeattime) {
+
         this.lastbeattime = lastbeattime;
     }
+
+    @Column(name = "checkstatus", length = 14)
+    public String getCheckstatus() {
+        return checkstatus;
+    }
+
+    public void setCheckstatus(String checkstatus) {
+
+        this.checkstatus = checkstatus;
+    }
+
+
+    @Column(name = "checkername", length = 20)
+    public String getCheckername() {
+        return checkername;
+    }
+
+    public void setCheckername(String checkername) {
+        this.checkername = checkername;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelist.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelist.java
new file mode 100644
index 0000000..01797fb
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelist.java
@@ -0,0 +1,102 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_whiteLIST")
+public class TWhitelist {
+  @Id
+  @SequenceGenerator(name = "whitelist_id", sequenceName = "SEQ_whiteLISTID", allocationSize = 1)
+  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "whitelist_id")
+  @Column(name="whitelistid", nullable = false, precision = 9)
+  private Integer whitelistid;
+
+  @Column(name = "listname", nullable = false, length = 200)
+  private String listname;
+
+
+  @Column(name = "STATUS", nullable = false, length = 10)
+  private String status;
+
+
+  @Column(name = "CREATE_OPERID", length = 32)
+  private String createOperid;
+
+  @Column(name = "CHECK_OPERID", length = 32)
+  private String checkOperid;
+
+  @Column(name = "CREATETIME", length = 14)
+  private String createtime;
+
+  @Column(name = "LASTSAVED", length = 14)
+  private String lastsaved;
+
+  @Column(name = "REMARK", length = 600)
+  private String remark;
+
+  public Integer getWhitelistid() {
+    return whitelistid;
+  }
+
+  public void setWhitelistid(Integer whitelistid) {
+    this.whitelistid = whitelistid;
+  }
+
+  public String getListname() {
+    return listname;
+  }
+
+  public void setListname(String listname) {
+    this.listname = listname;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getCreateOperid() {
+    return createOperid;
+  }
+
+  public void setCreateOperid(String createOperid) {
+    this.createOperid = createOperid;
+  }
+
+  public String getCheckOperid() {
+    return checkOperid;
+  }
+
+  public void setCheckOperid(String checkOperid) {
+    this.checkOperid = checkOperid;
+  }
+
+  public String getCreatetime() {
+    return createtime;
+  }
+
+  public void setCreatetime(String createtime) {
+    this.createtime = createtime;
+  }
+
+  public String getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(String lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelistDetail.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelistDetail.java
new file mode 100644
index 0000000..aba06a1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelistDetail.java
@@ -0,0 +1,101 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_WHITELIST_DETAIL")
+public class TWhitelistDetail {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "ID", nullable = false, length = 32)
+  private String id;
+
+  @Column(name="CARDNO", length = 20)
+  private String cardno;
+
+  @Column(name="USERNAME", length = 60)
+  private String username;
+
+  @Column(name="USERID", length = 32)
+  private String userid;
+
+  @Column(name="STATUS", length = 32)
+  private String status;
+
+  @Column(name="CARDPHYID", length = 20)
+  private String cardphyid;
+
+  @Column(name="WHITELISTID", nullable = false, length = 10)
+  private Integer whitelistid;
+
+  @Column(name="LASTSAVED", length = 14)
+  private String lastsaved;
+
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getCardno() {
+    return cardno;
+  }
+
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getUserid() {
+    return userid;
+  }
+
+  public void setUserid(String userid) {
+    this.userid = userid;
+  }
+
+  public Integer getWhitelistid() {
+    return whitelistid;
+  }
+
+  public void setWhitelistid(Integer whitelistid) {
+    this.whitelistid = whitelistid;
+  }
+
+  public String getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(String lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getCardphyid() {
+    return cardphyid;
+  }
+
+  public void setCardphyid(String cardphyid) {
+    this.cardphyid = cardphyid;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelistDevbind.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelistDevbind.java
new file mode 100644
index 0000000..3cb6a54
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TWhitelistDevbind.java
@@ -0,0 +1,68 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_whiteLIST_DEVBIND",
+    indexes = {@Index(name = "whitelistid_devbind_uk", unique = true, columnList = "deviceid,whitelistid")})
+public class TWhitelistDevbind {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "ID", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "DEVICEID", nullable = false, precision = 9)
+  private Integer deviceid;
+
+  @Column(name = "WHITELISTID", nullable = false, precision = 9)
+  private Integer whitelistid;
+
+  @Column(name = "CREATE_OPERID", length = 32)
+  private String createOperid;
+
+  @Column(name = "CREATETIME", length = 14)
+  private String createtime;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public Integer getDeviceid() {
+    return deviceid;
+  }
+
+  public void setDeviceid(Integer deviceid) {
+    this.deviceid = deviceid;
+  }
+
+  public Integer getWhitelistid() {
+    return whitelistid;
+  }
+
+  public void setWhitelistid(Integer whitelistid) {
+    this.whitelistid = whitelistid;
+  }
+
+  public String getCreateOperid() {
+    return createOperid;
+  }
+
+  public void setCreateOperid(String createOperid) {
+    this.createOperid = createOperid;
+  }
+
+  public String getCreatetime() {
+    return createtime;
+  }
+
+  public void setCreatetime(String createtime) {
+    this.createtime = createtime;
+  }
+}
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 a1197e1..25e1cab 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/CustomerService.java
@@ -2,10 +2,12 @@
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.restaurant.bean.CustomerSaveBean;
 import com.supwisdom.dlpay.restaurant.bean.CustomerSearchBean;
 import com.supwisdom.dlpay.restaurant.bean.CustomerShowBean;
 import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
+import com.supwisdom.dlpay.restaurant.domain.TCard;
 import com.supwisdom.dlpay.restaurant.domain.TCustomer;
 import com.supwisdom.dlpay.restaurant.domain.TDevice;
 import org.springframework.transaction.annotation.Propagation;
@@ -15,6 +17,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Optional;
 
 public interface CustomerService {
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
@@ -38,5 +41,6 @@
 
     JsonResult export( HttpServletRequest request, HttpServletResponse response);
 
+    TCustomer getCustomerByCardno(String cardno) ;
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceService.java
index 302f677..dd9bc16 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceService.java
@@ -5,6 +5,7 @@
 import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
 import com.supwisdom.dlpay.restaurant.domain.TDevice;
 import com.supwisdom.dlpay.framework.util.PageResult;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -16,6 +17,8 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     PageResult<TDevice> getDeviceByKey(DeviceSearchBean param);
 
+
+
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     PageResult<TDevice> getDeviceByDevicename(String devicename);
 
@@ -38,6 +41,10 @@
     JsonResult saveDevice(TDevice device);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    Boolean doCheckdevice(String status, List<Integer> deviceIds, UserDetails operUser ) throws WebCheckException;
+
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult deleteGroup(Integer id);
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/WhitelistService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/WhitelistService.java
new file mode 100644
index 0000000..639b108
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/WhitelistService.java
@@ -0,0 +1,67 @@
+package com.supwisdom.dlpay.restaurant.service;
+
+import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.restaurant.bean.CardverWhitelistBean;
+import com.supwisdom.dlpay.restaurant.bean.WhitelistBindShowBean;
+import com.supwisdom.dlpay.restaurant.bean.DevparaBinddevShowBean;
+import com.supwisdom.dlpay.restaurant.domain.TCardver;
+import com.supwisdom.dlpay.restaurant.domain.TWhitelist;
+import com.supwisdom.dlpay.restaurant.domain.TWhitelistDetail;
+import com.supwisdom.dlpay.restaurant.domain.TWhitelistDevbind;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+public interface WhitelistService {
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<TWhitelist> getWhitelist(String listname,  int pageNo, int pageSize);
+
+    @Transactional(rollbackFor = Exception.class)
+    boolean saveWhitelist(String listname,  MultipartFile file, TOperator oper) throws Exception;
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<TWhitelistDetail> getWhitelistDetails(String searchkey, int ruleid, int pageNo, int pageSize);
+
+    @Transactional(rollbackFor = Exception.class)
+    boolean closeWhitelist(int ruleid) throws WebCheckException;
+
+    @Transactional(rollbackFor = Exception.class)
+    boolean deleteWhitelist(int whitelistid) throws WebCheckException;
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<TWhitelist> getCheckWhitelist(String status,  int pageNo, int pageSize);
+
+    @Transactional(rollbackFor = Exception.class)
+    boolean doCheckWhitelist(int whitelistid, boolean passflag, String reason, TOperator oper) throws Exception;
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<WhitelistBindShowBean> getWhitelistDevBindInfo(String searchkey, int pageNo, int pageSize);
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    TWhitelistDevbind getWhitelistDevbindById(String id);
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    TWhitelistDevbind getWhitelistDevbindByDeviceId(Integer id);
+
+
+    @Transactional(rollbackFor = Exception.class)
+    boolean deleteWhitelistDevbind(TWhitelistDevbind bind);
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<DevparaBinddevShowBean> searchWhitelistBindDevices(Integer devgroupid, String searchkey, int whitelistid);
+
+    @Transactional(rollbackFor = Exception.class)
+    boolean saveWhitelistBindDevices(int whitelistid, List<Integer> deviceIds, TOperator oper) throws WebCheckException;
+
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    List<TWhitelist> getNormalWhitelists();
+
+
+    @Transactional(rollbackFor = Exception.class,readOnly = true)
+    List<TCardver>  getDevBindCardver(Integer deviceid) ;
+
+}
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 b5cd08d..ca3c217 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
@@ -282,4 +282,19 @@
         return list;
     }
 
+    public TCustomer getCustomerByCardno(String cardno) {
+        if (!StringUtil.isEmpty(cardno)) {
+            List<TCard> clst=cardDao.findAllByCardnoAndStatus(cardno,"normal");
+            if(clst.size()<=0){
+                return null;
+            }
+
+            Optional<TCustomer> list = customerDao.findById(clst.get(0).getCustid());
+            if (list.isPresent()) {
+                return list.get();
+            }
+        }
+        return null;
+    }
+
 }
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 7e069e2..ae15d55 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
@@ -9,6 +9,7 @@
 import com.supwisdom.dlpay.restaurant.bean.*;
 import com.supwisdom.dlpay.restaurant.dao.*;
 import com.supwisdom.dlpay.restaurant.domain.*;
+import com.supwisdom.dlpay.restaurant.service.CustomerService;
 import com.supwisdom.dlpay.restaurant.service.DeviceDiscountRuleService;
 import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
 import org.apache.commons.lang3.StringUtils;
@@ -52,6 +53,9 @@
     @Autowired
     private CardDao cardDao;
 
+    @Autowired
+    private CustomerService customerService;
+
     @PersistenceContext
     private EntityManager entityManager;
 
@@ -150,16 +154,7 @@
         return false;
     }
 
-    private TCustomer getCustomerByCardno(String cardno) {
-        if (!StringUtil.isEmpty(cardno)) {
-            TCard clst=cardDao.findAllByCardnoAndStatus(cardno,"normal").get(0);
-            Optional<TCustomer> list = customerDao.findById(clst.getCustid());
-            if (list.isPresent()) {
-                return list.get();
-            }
-        }
-        return null;
-    }
+
 
     private boolean checkRuleTimeError(String starttime, String endtime, String cardno, String custid) {
         Query query = entityManager.createNativeQuery("select count(a.id) from tb_discount_detail a, tb_discount_rule b where a.ruleid=b.ruleid and (b.status='uncheck' or b.status='normal') " +
@@ -247,7 +242,7 @@
                 if (StringUtil.isEmpty(name)) {
                     msg += "，姓名为空";
                 }
-                TCustomer customer = getCustomerByCardno(cardno);
+                TCustomer customer = customerService.getCustomerByCardno(cardno);
                 if (!StringUtil.isEmpty(cardno)) {
                     if (null == customer) {
                         msg += "，市民卡用户不存在";
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
index 9a4685d..fe65a84 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.restaurant.bean.DeviceSearchBean;
 import com.supwisdom.dlpay.restaurant.dao.DeviceDao;
 import com.supwisdom.dlpay.restaurant.dao.DeviceGroupDao;
@@ -15,6 +16,7 @@
 import com.supwisdom.dlpay.framework.util.ImportExcelUtil;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
@@ -22,6 +24,7 @@
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.multipart.MultipartFile;
@@ -70,6 +73,9 @@
                     if (!StringUtil.isEmpty(param.getFactoryid())) {
                         list.add(cb.equal(root.get("factoryid").as(String.class), param.getFactoryid()));
                     }
+                    if (!StringUtil.isEmpty(param.getCheckstatus())) {
+                        list.add(cb.equal(root.get("checkstatus").as(String.class), param.getCheckstatus()));
+                    }
                     if (null!=param.getId()) {
                         list.add(cb.like(root.get("id").as(String.class), param.getId().toString()));
                     }
@@ -144,7 +150,8 @@
         String operid=OperUtil.getCurrentOperid();
         device.setOperid(operid);
         device.setDevicename(device.getDevphyid());
-
+        device.setLastsaved(DateUtil.getNow());
+        device.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_UNCHECK);
       /*  TDevice d = deviceDao.save(device);
         TShopDevice shopDevice = new TShopDevice();
         shopDevice.setDeviceid(d.getId());
@@ -156,6 +163,20 @@
     }
 
     @Override
+    public Boolean doCheckdevice(String status, List<Integer> deviceIds, UserDetails operUser) throws WebCheckException {
+        for(Integer id:deviceIds){
+            TDevice device = deviceDao.findTDeviceById(id);
+            if(null==device){
+                throw new WebCheckException(device.getDevicename()+"设备不存在");
+            }
+            device.setCheckstatus(status);
+            device.setOperid(operUser.getUsername());
+            deviceDao.save(device);
+        }
+        return true;
+    }
+
+    @Override
     public JsonResult updateDevice(TDevice device) {
         TDevice d = deviceDao.findTDeviceById(device.getId());
         d.setDevicename(device.getDevicename());
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/WhitelistServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/WhitelistServiceImpl.java
new file mode 100644
index 0000000..03c7ab7
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/WhitelistServiceImpl.java
@@ -0,0 +1,418 @@
+package com.supwisdom.dlpay.restaurant.service.impl;
+
+import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.ImportExcelUtil;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.restaurant.bean.CardverWhitelistBean;
+import com.supwisdom.dlpay.restaurant.bean.WhitelistBindShowBean;
+import com.supwisdom.dlpay.restaurant.bean.DevparaBinddevShowBean;
+import com.supwisdom.dlpay.restaurant.dao.*;
+import com.supwisdom.dlpay.restaurant.domain.*;
+import com.supwisdom.dlpay.restaurant.service.WhitelistService;
+import com.supwisdom.dlpay.restaurant.service.CardService;
+import com.supwisdom.dlpay.restaurant.service.CustomerService;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import org.apache.commons.lang3.StringUtils;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+
+@Service
+public class WhitelistServiceImpl implements WhitelistService {
+
+    @Autowired
+    private WhitelistDao WhitelistDao;
+    @Autowired
+    private CardService cardService;
+    @Autowired
+    private SystemUtilService systemUtilService;
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private WhitelistDetailDao WhitelistDetailDao;
+    @Autowired
+    private WhitelistDevbindDao WhitelistDevbindDao;
+    @Autowired
+    private DeviceDao deviceDao;
+
+    @PersistenceContext
+    private EntityManager entityManager;
+
+    @Override
+    public PageResult<TWhitelist> getWhitelist(String listname, int pageNo, int pageSize) {
+        Pageable pageable = PageRequest.of(pageNo - 1, pageSize
+                , Sort.by("Whitelistid"));
+        if (!StringUtil.isEmpty(listname)) {
+            return new PageResult<>(WhitelistDao.findAllByListnameContaining(listname, pageable));
+        }
+        return new PageResult<>(WhitelistDao.findAll(pageable));
+    }
+
+    @Override
+    public boolean saveWhitelist(String listname, MultipartFile file, TOperator oper) throws Exception {
+        TWhitelist list = new TWhitelist();
+        if (WhitelistDao.checkListnameExists(listname) > 0) {
+            throw new WebCheckException("白名单名称已经存在！");
+        }
+        list.setListname(listname);
+        list.setStatus(RestaurantConstant.STATUS_DISCOUNTRULE_UNCHECK);
+        list.setCreateOperid(oper.getOperid());
+        String systime = systemUtilService.getSysdatetime().getHostdatetime();
+        list.setCreatetime(systime);
+        list.setLastsaved(systime);
+        WhitelistDao.save(list);
+
+        String filename = file.getOriginalFilename();
+        if (!filename.endsWith(".xls") && !filename.endsWith(".xlsx")) {
+            throw new WebCheckException("文件格式错误,请选择excel文件");
+        }
+
+        List<Object[][]> excelData = null;
+        try {
+            if (filename.endsWith(".xls")) {
+                excelData = ImportExcelUtil.getIntegralData(file.getInputStream());//2003版本
+            } else {
+                excelData = ImportExcelUtil.getIntegralData07(file.getInputStream());//2007版本以上
+            }
+            if (null == excelData || excelData.size() < 1) {
+                throw new WebCheckException("excel文件解析错误");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new WebCheckException("模板格式错误，请重新下载模板");
+        }
+
+        int index_cardno = -1;
+        int index_name = -1;
+        Object[] titleRow = excelData.get(0)[0]; //sheet1表头
+        for (int i = 0; i < titleRow.length; i++) {
+            if ("市民卡号".equals(titleRow[i])) {
+                index_cardno = i;
+                continue;
+            } else if ("姓名".equals(titleRow[i])) {
+                index_name = i;
+                continue;
+            }
+        }
+        if (index_cardno == -1 || index_name == -1 || excelData.get(0).length < 2) {
+            throw new WebCheckException("名单模板表头不能修改，且必须包含数据！");
+        }
+
+        List<String> successCardnos = new ArrayList<>(0);
+        List<String> errmsgList = new ArrayList<>(0);
+
+        try {
+            for (int n = 1; n < excelData.get(0).length; n++) {
+                String msg = "";
+                Object[] row = excelData.get(0)[n];
+                String cardno = row[index_cardno] == null ? null : row[index_cardno].toString().trim();
+                String name = row[index_name] == null ? null : row[index_name].toString().trim();
+                if (StringUtil.isEmpty(cardno)) {
+                    msg += "，市民卡号为空";
+                }
+                if (StringUtil.isEmpty(name)) {
+                    msg += "，姓名为空";
+                }
+                TCustomer customer = customerService.getCustomerByCardno(cardno);
+                if (!StringUtil.isEmpty(cardno)) {
+                    if (null == customer) {
+                        msg += "，市民卡用户不存在";
+                    } else if (!customer.getCustname().equals(name)) {
+                        msg += "，市民卡号与姓名不匹配！";
+                    }
+                }
+                if (!StringUtil.isEmpty(cardno) && successCardnos.contains(cardno)) {
+                    msg += "，市民卡号重复！";
+                }
+
+                TCard card = cardService.getCardByCardno(cardno);
+
+                if (!StringUtil.isEmpty(msg)) {
+                    errmsgList.add("第" + (n + 1) + "行数据错误" + msg);
+                } else {
+                    TWhitelistDetail detail = new TWhitelistDetail();
+                    detail.setWhitelistid(list.getWhitelistid());
+                    detail.setCardno(cardno);
+                    detail.setUsername(name);
+                    detail.setUserid(customer.getCustid() + "");
+                    detail.setStatus("uncheck");
+                    detail.setCardphyid(card.getCardphyid());
+                    detail.setLastsaved(systime);
+                    WhitelistDetailDao.save(detail); //保存明细
+
+                    successCardnos.add(cardno);
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new WebCheckException("模板格式有误，请确保卡号为文本格式");
+        }
+
+        if (!StringUtil.isEmpty(errmsgList)) {
+            StringBuffer errmsg = new StringBuffer("导入失败，名单存在错误！");
+            for (int j = 0; j < errmsgList.size(); j++) {
+                errmsg.append("<br/>" + errmsgList.get(j));
+                if (j > 10) {
+                    errmsg.append("<br/>错误太多，请仔细核对名单后再上传！");
+                }
+            }
+            throw new WebCheckException(errmsg.toString());
+        }
+        return true;
+    }
+
+    @Override
+    public PageResult<TWhitelistDetail> getWhitelistDetails(String searchkey, int Whitelistid, int pageNo, int pageSize) {
+        StringBuffer querySql = new StringBuffer("from TWhitelistDetail t where t.Whitelistid=:Whitelistid ");
+        StringBuffer countSql = new StringBuffer("select count(t.id) as cnt from TWhitelistDetail t where t.Whitelistid=:Whitelistid ");
+        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(" order by t.cardno ");
+        Query query = entityManager.createQuery(querySql.toString());
+        Query countQuery = entityManager.createQuery(countSql.toString());
+        query.setParameter("Whitelistid", Whitelistid);
+        countQuery.setParameter("Whitelistid", Whitelistid);
+        if (!StringUtil.isEmpty(searchkey)) {
+            query.setParameter("str", "%" + searchkey.trim() + "%");
+            countQuery.setParameter("str", "%" + searchkey.trim() + "%");
+        }
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize); //分页显示
+        List<TWhitelistDetail> list = query.getResultList();
+        Long count = (Long) countQuery.getSingleResult();
+        return new PageResult<>(count.longValue(), list);
+    }
+
+    @Override
+    public boolean closeWhitelist(int Whitelistid) throws WebCheckException {
+        Optional<TWhitelist> olist = WhitelistDao.findById(Whitelistid);
+        if (!olist.isPresent()) {
+            throw new WebCheckException("白名单不存在！");
+        }
+        TWhitelist list = olist.get();
+        if (RestaurantConstant.STATUS_DISCOUNTRULE_CLOSED.equals(list.getStatus())) {
+            throw new WebCheckException("白名单已经失效！");
+        } else if (!RestaurantConstant.STATUS_DISCOUNTRULE_NORMAL.equals(list.getStatus())) {
+            throw new WebCheckException("白名单未审核通过，不能关闭");
+        }
+
+
+        list.setStatus(RestaurantConstant.STATUS_DISCOUNTRULE_CLOSED);
+        list.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+        WhitelistDao.save(list);
+        return true;
+    }
+
+
+    @Override
+    public boolean deleteWhitelist(int Whitelistid) throws WebCheckException {
+        Optional<TWhitelist> list = WhitelistDao.findById(Whitelistid);
+        if (!list.isPresent()) {
+            throw new WebCheckException("白名单不存在！");
+        }
+        TWhitelist tWhitelist = list.get();
+        if (!RestaurantConstant.STATUS_DISCOUNTRULE_UNCHECK.equals(tWhitelist.getStatus()) && !RestaurantConstant.STATUS_DISCOUNTRULE_REJECT.equals(tWhitelist.getStatus())) {
+            throw new WebCheckException("待审核或驳回的白名单才能删除！");
+        }
+
+        WhitelistDetailDao.deleteWhitelistDetailByWhitelistid(Whitelistid); //名单
+        WhitelistDevbindDao.deleteBindByWhitelistid(Whitelistid); //绑定设备
+        WhitelistDao.delete(tWhitelist);
+        return true;
+    }
+
+    @Override
+    public PageResult<TWhitelist> getCheckWhitelist(String status, int pageNo, int pageSize) {
+        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(Sort.Direction.DESC, "Whitelistid"));
+        if (StringUtil.isEmpty(status)) {
+            return new PageResult<>(WhitelistDao.findAll());
+        }
+        return new PageResult<>(WhitelistDao.findAllByStatus(status, pageable));
+
+    }
+
+    @Override
+    public boolean doCheckWhitelist(int Whitelistid, boolean passflag, String reason, TOperator oper) throws Exception {
+        Optional<TWhitelist> list = WhitelistDao.findById(Whitelistid);
+        if (!list.isPresent()) {
+            throw new WebCheckException("白名单不存在！");
+        }
+        TWhitelist tWhitelist = list.get();
+        if (!RestaurantConstant.STATUS_DISCOUNTRULE_UNCHECK.equals(tWhitelist.getStatus()) && !RestaurantConstant.STATUS_DISCOUNTRULE_REJECT.equals(tWhitelist.getStatus())) {
+            throw new WebCheckException("白名单非审核状态！");
+        }
+
+        tWhitelist.setCheckOperid(oper.getOperid());
+        tWhitelist.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+        if (passflag) {
+            tWhitelist.setStatus(RestaurantConstant.STATUS_DISCOUNTRULE_NORMAL);
+            tWhitelist.setRemark(null);
+        } else {
+            tWhitelist.setStatus(RestaurantConstant.STATUS_DISCOUNTRULE_REJECT);
+            tWhitelist.setRemark(reason);
+        }
+        WhitelistDao.save(tWhitelist);
+        WhitelistDetailDao.updateWhitelistDetailStatusByWhitelistid(tWhitelist.getStatus(), tWhitelist.getWhitelistid());
+        return true;
+    }
+
+
+    @Override
+    public PageResult<WhitelistBindShowBean> getWhitelistDevBindInfo(String searchkey, int pageNo, int pageSize) {
+        StringBuffer querySql = new StringBuffer("select t.id,t.deviceid,b.devicename,b.devphyid,t.Whitelistid,a.listname,a.status as liststatus,t.createtime " +
+                " from TB_WhiteLIST_DEVBIND t left join TB_WhiteLIST a on t.Whitelistid=a.Whitelistid left join TB_DEVICE b on t.deviceid=b.id where 1=1 ");
+        StringBuffer countSql = new StringBuffer("select count(t.id) as cnt " +
+                " from TB_WhiteLIST_DEVBIND t left join TB_WhiteLIST a on t.Whitelistid=a.Whitelistid left join TB_DEVICE b on t.deviceid=b.id where 1=1 ");
+        if (!StringUtil.isEmpty(searchkey)) {
+            querySql.append(" and (a.listname like :str or b.devicename like :str or b.devphyid like :str) ");
+            countSql.append(" and (a.listname like :str or b.devicename like :str or b.devphyid like :str) ");
+        }
+        querySql.append(" order by t.createtime desc ");
+        Query query = entityManager.createNativeQuery(querySql.toString());
+        Query countQuery = entityManager.createNativeQuery(countSql.toString());
+        if (!StringUtil.isEmpty(searchkey)) {
+            query.setParameter("str", "%" + searchkey.trim() + "%");
+            countQuery.setParameter("str", "%" + searchkey.trim() + "%");
+        }
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(WhitelistBindShowBean.class));
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize); //分页显示
+        List<WhitelistBindShowBean> list = query.getResultList();
+        BigInteger count = (BigInteger) countQuery.getSingleResult();
+        return new PageResult<>(count.longValue(), list);
+    }
+
+    @Override
+    public TWhitelistDevbind getWhitelistDevbindById(String id) {
+        if (!StringUtil.isEmpty(id)) {
+            return WhitelistDevbindDao.getWhitelistDevbindById(id.trim());
+        }
+        return null;
+    }
+
+    @Override
+    public TWhitelistDevbind getWhitelistDevbindByDeviceId(Integer id) {
+        if (null != id) {
+            return WhitelistDevbindDao.findByDeviceid(id);
+        }
+        return null;
+    }
+
+    @Override
+    public boolean deleteWhitelistDevbind(TWhitelistDevbind bind) {
+        if (null != bind) {
+            WhitelistDevbindDao.delete(bind);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public PageResult<DevparaBinddevShowBean> searchWhitelistBindDevices(Integer devgroupid, String searchkey, int Whitelistid) {
+        List<Integer> chirdGroupids = null;
+        if (null != devgroupid) {
+            Query chirdGroupQuery = entityManager.createNativeQuery(" WITH  RECURSIVE  r  AS ( " +
+                    " SELECT * FROM tb_devicegroup WHERE devgroupid = :gid " +
+                    " union ALL " +
+                    " SELECT a.* FROM tb_devicegroup a, r WHERE a.pid = r.devgroupid ) " +
+                    " SELECT devgroupid FROM r ORDER BY devgroupid ");
+            chirdGroupQuery.setParameter("gid", devgroupid.intValue());
+            chirdGroupids = chirdGroupQuery.getResultList(); //递归查询所有的子节点
+        }
+
+        StringBuffer sql = new StringBuffer("select t.id as deviceid,t.devicename,t.devphyid,t.devgroupid,a.groupname as devgroupname " +
+                " from TB_DEVICE t left join TB_DEVICEGROUP a on t.devgroupid=a.devgroupid " +
+                " left join TB_WhiteLIST_DEVBIND b on t.id=b.deviceid and b.Whitelistid=:lid where b.id is null and t.state=1 ");
+        if (!StringUtil.isEmpty(chirdGroupids)) {
+            sql.append(" and t.devgroupid in (" + StringUtils.join(chirdGroupids.toArray(), ",") + ") ");
+        }
+        if (!StringUtil.isEmpty(searchkey)) {
+            sql.append(" and (t.devicename like :str or t.devphyid like :str) ");
+        }
+        sql.append(" order by t.id ");
+        Query query = entityManager.createNativeQuery(sql.toString());
+        if (!StringUtil.isEmpty(searchkey)) {
+            query.setParameter("str", "%" + searchkey.trim() + "%");
+        }
+        query.setParameter("lid", Whitelistid);
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(DevparaBinddevShowBean.class));
+        List<DevparaBinddevShowBean> list = query.getResultList();
+        return new PageResult<>(list);
+    }
+
+    @Override
+    public boolean saveWhitelistBindDevices(int Whitelistid, List<Integer> deviceIds, TOperator oper) throws WebCheckException {
+        Optional<TWhitelist> olist = WhitelistDao.findById(Whitelistid);
+        if (!olist.isPresent()) {
+            throw new WebCheckException("所选白名单不存在");
+        }
+        TWhitelist list = olist.get();
+        if (!RestaurantConstant.STATUS_DISCOUNTRULE_NORMAL.equals(list.getStatus())) {
+            throw new WebCheckException("所选白名单状态异常");
+        }
+
+        for (Integer id : deviceIds) {
+            TDevice device = deviceDao.findTDeviceById(id);
+            if (null == device) {
+                throw new WebCheckException("终端编号为[" + id + "]的设备不存在");
+            } else if (1 != device.getState()) {
+                throw new WebCheckException("终端编号为[" + id + "]的设备状态异常");
+            }
+            TWhitelistDevbind obind = WhitelistDevbindDao.findByDeviceid(id);
+            if (null != obind) {
+                throw new WebCheckException("终端编号为[" + id + "]的设备已有绑定关系");
+            }
+
+            TWhitelistDevbind bind = new TWhitelistDevbind();
+            bind.setWhitelistid(list.getWhitelistid());
+            bind.setDeviceid(device.getId());
+            bind.setCreateOperid(oper == null ? null : oper.getOperid());
+            bind.setCreatetime(systemUtilService.getSysdatetime().getHostdatetime());
+            WhitelistDevbindDao.save(bind);
+        }
+        return true;
+    }
+
+    @Override
+    public List<TWhitelist> getNormalWhitelists() {
+        List<TWhitelist> lists = WhitelistDao.findAllByStatus(RestaurantConstant.STATUS_DISCOUNTRULE_NORMAL);
+        if (lists.size() > 0) {
+            return lists;
+        }
+        return new ArrayList<>(0);
+    }
+
+    @Override
+    public List<TCardver> getDevBindCardver(Integer deviceid) {
+        StringBuffer sql = new StringBuffer("SELECT t.cardno,t.cardphyid FROM tb_whitelist_detail w " +
+                "left join tb_cardver t on t.cardno=w.cardno " +
+                "left join tb_whitelist_devbind d on d.whitelistid=w.whitelistid " +
+                "where d.deviceid=:id");
+        Query query = entityManager.createNativeQuery(sql.toString());
+        query.setParameter("str", deviceid);
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TCardver.class));
+        List<TCardver> list = query.getResultList();
+        return list;
+    }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
index beb84bc..a28c797 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
@@ -8,7 +8,8 @@
 
   public static final String STATUS_CHECKSTATUS_UNCHECK = "uncheck"; //待审核
   public static final String STATUS_CHECKSTATUS_NORMAL = "normal";  //有效
-  public static final String STATUS_CHECKSTATUS_FAIL = "fail";  //有效
+  public static final String STATUS_CHECKSTATUS_FAIL = "fail";  //无效
+  public static final String STATUS_CHECKSTATUS_REJECT = "reject";   //驳回
 
   public static final String TRANSMODE_CARD = "card";  //卡消费
   public static final String TRANSMODE_CODE = "code";  //二维码消费
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 94e2492..e53e5c2 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -115,6 +115,14 @@
 INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10);
 --INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (2, NULL, 1, NULL, '', '/custmeallist/index', '就餐名单管理', 3, 22);
 --INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (7, NULL, 1, NULL, '', '/custmealcheck/index', '就餐名单审核', 4, 22);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (8, NULL, 1, NULL, '', '/devicecheck/index', '设备审核', 2, 14);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (13, NULL, 1, NULL, '', '/whitelist/index', '就餐白名单维护', 1, 11);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (18, NULL, 1, NULL, '', '/whitelistcheck/index', '就餐白名单审核', 2, 11);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (31, NULL, 1, NULL, '', '/whitelistbind/devbind', '就餐白名单设备绑定', 3, 11);
+INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (11, NULL, 0, NULL, 'layui-icon-util', '#', '就餐白名单管理', 7, -1);
+
+
+
 
 
 INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('dinner', '200000', '20190709102922', '晚餐');
@@ -129,163 +137,167 @@
 INSERT INTO "tb_paytype_config" (paytype,configid,config_name,config_value) VALUES ('yktpay', 'orderurl', NULL, 'http://172.28.201.101:9116/epayapi/services/thirdparty/common/pay');
 INSERT INTO "tb_paytype_config" (paytype,configid,config_name,config_value) VALUES ('yktpay', 'reverseurl', NULL, 'http://172.28.201.101:9116/epayapi/services/thirdparty/common/payreverse');
 
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b30009', 16, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b3000a', 17, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b3000b', 19, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b4000c', 20, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b4000d', 21, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b4000f', 6, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b40010', 7, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b50011', 8, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b50012', 9, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0b50013', 22, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bd0015', 4, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bd0016', 5, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0be0017', 10, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0be0018', 11, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0be0019', 12, NULL, '402890866be40f77016be4c848b9002f');
-
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bf001a', 13, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bf001b', 14, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bf001c', 15, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0bf001e', 24, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c00021', 23, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c00022', 25, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c00023', 31, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c10024', 38, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c10025', 42, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c10026', 44, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c10027', 86, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c20029', 45, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c2002a', 46, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c2002b', 47, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0c3002c', 48, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0e3002d', 49, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0e3002f', 50, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0e30030', 52, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0e30031', 53, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c0e40033', 54, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1030034', 55, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1030035', 56, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1040036', 57, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1040038', 58, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1040039', 59, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c104003a', 60, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c105003b', 65, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c105003e', 61, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c105003f', 62, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1060040', 63, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1060041', 64, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1060042', 66, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1060043', 67, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1060044', 68, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1070047', 71, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1070048', 80, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1070049', 81, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c108004b', 70, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c108004c', 74, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c109004d', 75, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c109004e', 76, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c109004f', 77, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1090050', 78, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c1090052', 69, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10a0053', 82, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10a0054', 83, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10a0055', 84, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10a0058', 79, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10b0059', 85, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10b005a', 87, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10b005c', 88, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10b005d', 89, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10c005e', 90, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10c005f', 1, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10c0060', 2, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10c0061', 3, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('402890866bf9ea0d016bfde2c10c0062', 18, NULL, '402890866be40f77016be4c848b9002f');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('ff8080816aaf2ec3016aaf4edaac009f', 27, NULL, '2c9cab836a8af5d5016a8af6ece20000');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f56001d', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f57001e', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f57001f', 19, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f570020', 20, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f570021', 21, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f580023', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f580024', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f580025', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f580026', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f590027', 22, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f590029', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f59002a', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f59002b', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f59002c', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5a002d', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5a002e', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5b002f', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5b0030', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5b0032', 24, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5f0044', 23, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5f0045', 25, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5f0046', 31, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5f0047', 38, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f5f0048', 42, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f600049', 44, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f60004a', 86, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f60004c', 45, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f60004d', 46, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f60004e', 47, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f61004f', 48, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f610050', 49, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f610052', 50, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f610053', 52, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f610054', 53, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f620056', 55, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f620057', 54, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f620058', 57, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f630059', 56, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f63005b', 59, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f63005c', 58, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f64005d', 60, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f64005e', 65, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f660066', 61, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f660067', 62, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f660068', 63, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f670069', 64, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f68006a', 66, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f68006b', 67, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f68006c', 68, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f68006e', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f69006f', 32, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f690070', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f690071', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f690072', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6c007e', 71, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6c007f', 80, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6c0080', 81, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6d0082', 77, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6d0083', 78, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6d0084', 76, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6e0085', 74, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6e0086', 70, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6e0087', 75, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6f0089', 82, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f6f008a', 83, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f70008b', 69, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f70008c', 84, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f720095', 85, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f720096', 79, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f720097', 87, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f720099', 89, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f72009a', 90, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission"(id,resid,role_func_id,roleid) VALUES ('297e0a7e6bff66af016bff683f73009b', 88, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb14005f', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150061', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150062', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150063', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150064', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150065', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbc8fa4016cbc91eb150066', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_permission" (id,resid,role_func_id,roleid) VALUES ('297e0a7e6cbca060016cbca3a983006a', 27, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b30009', 16, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b3000a', 17, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b3000b', 19, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b4000c', 20, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b4000d', 21, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b4000f', 6, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b40010', 7, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b50011', 8, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b50012', 9, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0b50013', 22, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0bd0015', 4, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0bd0016', 5, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0be0017', 10, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0be0018', 11, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0be0019', 12, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0bf001a', 13, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0bf001b', 14, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0bf001c', 15, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0bf001e', 24, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c00021', 23, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c00022', 25, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c00023', 31, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c10024', 38, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c10025', 42, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c10026', 44, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c10027', 86, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c20029', 45, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c2002a', 46, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c2002b', 47, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0c3002c', 48, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0e3002d', 49, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0e3002f', 50, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0e30030', 52, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0e30031', 53, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c0e40033', 54, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1030034', 55, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1030035', 56, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1040036', 57, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1040038', 58, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1040039', 59, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c104003a', 60, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c105003b', 65, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c105003e', 61, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c105003f', 62, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1060040', 63, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1060041', 64, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1060042', 66, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1060043', 67, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1060044', 68, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1070047', 71, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1070048', 80, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1070049', 81, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c108004b', 70, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c108004c', 74, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c109004d', 75, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c109004e', 76, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c109004f', 77, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1090050', 78, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c1090052', 69, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10a0053', 82, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10a0054', 83, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10a0055', 84, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10a0058', 79, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10b0059', 85, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10b005a', 87, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10b005c', 88, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10b005d', 89, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10c005e', 90, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10c005f', 1, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10c0060', 2, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10c0061', 3, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('402890866bf9ea0d016bfde2c10c0062', 18, NULL, '402890866be40f77016be4c848b9002f');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('ff8080816aaf2ec3016aaf4edaac009f', 27, NULL, '2c9cab836a8af5d5016a8af6ece20000');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a330002', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a330003', 17, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a340004', 19, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a340005', 20, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a340006', 21, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a340008', 6, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a350009', 7, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a35000a', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a36000b', 9, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a36000c', 22, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a36000e', 4, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a37000f', 5, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a370010', 10, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a370011', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a370012', 12, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a370013', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a380014', 14, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a380015', 15, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a380017', 24, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a39001a', 23, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a39001b', 25, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a39001c', 31, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a39001d', 38, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a39001e', 42, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a39001f', 44, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a390020', 86, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3a0022', 45, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3a0023', 46, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3a0024', 47, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3a0025', 48, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3a0026', 49, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3b0028', 50, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3b0029', 52, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3b002a', 53, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3b002c', 54, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3b002d', 55, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3b002e', 56, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3c002f', 57, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3c0031', 58, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3c0032', 59, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3c0033', 60, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3c0034', 65, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3d0036', 1, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3d0037', 2, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3d003a', 91, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3e003c', 61, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3e003d', 62, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3e003e', 63, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3e003f', 64, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3e0040', 66, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3e0041', 67, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3f0042', 68, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a3f0045', 80, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a400046', 81, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a400047', 71, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a400049', 70, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a40004a', 74, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a41004b', 75, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a41004c', 76, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a41004d', 77, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a41004e', 78, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a410050', 82, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a410051', 83, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a420052', 84, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a420053', 69, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a420056', 79, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a420057', 85, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a420058', 87, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a43005a', 88, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a43005b', 89, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a43005c', 90, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a44005f', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a440060', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a440061', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a450062', 32, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a460063', 33, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a460065', 34, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a460066', 35, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a460067', 36, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a460068', 37, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a470069', 39, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a47006a', 40, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a47006d', 51, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a47006e', 72, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a470070', 41, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a480071', 43, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a480073', 3, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO  "tb_permission"("id", "resid", "role_func_id", "roleid") VALUES ('297ee5316d240e8e016d24101a480074', 18, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 
 
 
@@ -311,8 +323,8 @@
 INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (23, '', 15, '查询', '/device/index');
 INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (25, '', 15, '添加页面', '/device/loadadd');
 INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (31, '', 15, '添加', '/device/add');
-INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (26, '', 11, '修改', '/param/sysparaupdate');
-INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (27, '', 11, '查询', '/param/syspara');
+--INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (26, '', 11, '修改', '/param/sysparaupdate');
+--INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (27, '', 11, '查询', '/param/syspara');
 INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (28, '', 12, '查询', '/param/businesspara');
 INSERT INTO "tb_resource"  (id,code,function_id,name,uri) VALUES (29, '', 12, '删除', '/param/deletebusinesspara');
 INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (30, '', 12, '修改', '/param/businessparaupdate');
@@ -374,6 +386,17 @@
 --INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (92, '', 1, '添加', '/custtype/add');
 --INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (93, '', 1, '修改', '/custtype/update');
 --INSERT INTO "tb_resource" (id,code,function_id,name,uri) VALUES (94, '', 1, '删除', '/custtype/delete');
+INSERT INTO "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (1, '', 8, '查询', '/devicecheck/index');
+INSERT INTO "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (2, '', 8, '审核', '/devicecheck/docheckdevice');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (3, '', 13, '查询', '/whitelist/index');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (18, '', 13, '添加', '/whitelist/addwhitelist');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (41, '', 18, '查询', '/whitelistcheck/checklist');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (43, '', 18, '审核', '/whitelistcheck/load4checkdetail');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (51, '', 31, '查询', '/whitelistbind/devbind');
+INSERT INTO  "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (72, '', 31, '绑定', '/whitelistbind/dobinddev');
+
+
+
 
 INSERT INTO "tb_role" (roleid,createtime,editflag,lastsaved,rolecode,roledesc,rolename) VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '20190101000000', 0, '', 'ROLE_ADMIN', '超级管理员', '超级管理员');
 INSERT INTO "tb_role" (roleid,createtime,editflag,lastsaved,rolecode,roledesc,rolename) VALUES ('2c9cab836a8af5d5016a8af6ece20000', '20190506102639', 1, '', 'ROLE_ADMIN', '系统管理员', '系统管理员');
@@ -413,6 +436,13 @@
 INSERT INTO "tb_role_function" (id,functionid,permissions,roleid) VALUES ('297e0a7e6bd65d7c016bd67401e10086', 28, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_role_function" (id,functionid,permissions,roleid) VALUES ('297e0a7e6bd65d7c016bd67401e10087', 29, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_role_function" (id,functionid,permissions,roleid) VALUES ('297e0a7e6bd65d7c016bd67401e2008b', 30, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('297ee5316d2438ba016d243a95b400d6', 13, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('297ee5316d2438ba016d243a95b500d9', 18, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('297ee5316d2438ba016d243a95b600dc', 31, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('297ee5316d2446b3016d2447fc74006a', 11, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+INSERT INTO "tb_role_function"("id", "functionid", "permissions", "roleid") VALUES ('297ee5316d24bd0e016d24c02e250039', 8, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
+
+
 
 INSERT INTO "tb_shopsettlement" (shopsettlementno,operno,shopid,shopname) VALUES ('1', '1234', '2000000012', '测试商户');
 INSERT INTO "tb_subject" (subjno,balflag,displayflag,endflag,fsubjno,opendate,subjlevel,subjname,subjtype) VALUES ('1001', 1, 'y', 1, NULL, 20190604, 1, '库存现金', 1);
diff --git a/src/main/resources/templates/restaurant/device/index.html b/src/main/resources/templates/restaurant/device/index.html
index a63f279..ed3ff48 100644
--- a/src/main/resources/templates/restaurant/device/index.html
+++ b/src/main/resources/templates/restaurant/device/index.html
@@ -46,6 +46,27 @@
                     {field: 'factoryid', sort: true, width: 200, title: '设备厂商'},
                     {field: 'state', title: '状态', sort: true, width: 100, templet: '#device-dev-tpl-state'},
                     {
+                        field: 'checkstatus',
+                        title: '审核状态',
+                        align: 'center',
+                        width: 120,
+                        sort: true,
+                        templet: function (d) {
+                            if ('uncheck' == d.checkstatus) {
+                                return '<span class="layui-badge layui-bg-orange">待审核</span>'
+                            } else if ('normal' == d.checkstatus) {
+                                return '<span class="layui-badge layui-bg-green">有效</span>';
+                            } else if ('fail' == d.checkstatus) {
+                                return '<span class="layui-badge layui-bg-gray">无效</span>';
+                            } else if ('reject' == d.checkstatus) {
+                                return '<span class="layui-badge">驳回</span>';
+                            } else {
+                                return d.status;
+                            }
+                        }
+                    },
+
+                    {
                         field: 'id', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
                             return ' <a class="layui-btn  layui-btn-xs" lay-event="device-edit"><i class="layui-icon layui-icon-edit"></i>编辑</a> ';
                         }
diff --git a/src/main/resources/templates/restaurant/devicecheck/index.html b/src/main/resources/templates/restaurant/devicecheck/index.html
new file mode 100644
index 0000000..76ba2b0
--- /dev/null
+++ b/src/main/resources/templates/restaurant/devicecheck/index.html
@@ -0,0 +1,152 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">设备审核</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">设备管理</a>
+          <a><cite>设备审核</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <select id="search-devicecheck-check-status">
+                <option value=""> 选择设备审核状态</option>
+                <option value="uncheck" selected> 待审核</option>
+                <option value="normal"> 有效</option>
+                <option value="fail"> 无效</option>
+                <option value="reject"> 驳回</option>
+            </select>&emsp;
+            <button id="btn-search-devicecheck-check" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
+            </button>
+        </div>
+        <table class="layui-table" id="devicecheckTable" lay-filter="devicecheckTable-filter"></table>
+    </div>
+</div>
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="deviceCheckToolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" lay-event="doChecked">审核通过</button>
+        <button class="layui-btn layui-btn-sm" lay-event="doReject">审核驳回</button>
+    </div>
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+
+        form.render("select");
+
+        table.render({
+            elem: '#devicecheckTable',
+            url: '[[@{/devicecheck/list}]]',
+            page: true,
+            toolbar:'#deviceCheckToolbar',
+            where:{
+                status:'uncheck'
+            },
+            cols: [
+                [
+                    {type:'checkbox'},
+                    {field: 'id', title: '终端编号', sort: true},
+                    {field: 'devphyid', sort: true, width: 200, title: '设备物理id'},
+                    {field: 'shopid', sort: true, width: 200, title: '商户id'},
+                    {field: 'factoryid', sort: true, width: 200, title: '设备厂商'},
+                    {field: 'state', title: '状态', sort: true, width: 100, templet: '#device-dev-tpl-state'},
+                    {
+                        field: 'checkstatus',
+                        title: '审核状态',
+                        align: 'center',
+                        width: 120,
+                        sort: true,
+                        templet: function (d) {
+                            if ('uncheck' == d.checkstatus) {
+                                return '<span class="layui-badge layui-bg-orange">待审核</span>'
+                            } else if ('normal' == d.checkstatus) {
+                                return '<span class="layui-badge layui-bg-green">有效</span>';
+                            } else if ('fail' == d.checkstatus) {
+                                return '<span class="layui-badge layui-bg-gray">无效</span>';
+                            } else if ('reject' == d.checkstatus) {
+                                return '<span class="layui-badge">驳回</span>';
+                            } else {
+                                return d.status;
+                            }
+                        }
+                    },
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-search-devicecheck-check').click(function () {
+            var state = $("#search-devicecheck-check-status").val();
+            table.reload('devicecheckTable', {where: {status: state}, page: {curr: 1}});
+        });
+
+        table.on('toolbar(devicecheckTable-filter)', function(obj){
+            var checkStatus = table.checkStatus(obj.config.id);
+            var data = checkStatus.data;
+            if(data.length<=0){
+                layer.msg("请选择需要审核的设备", {icon: 2});
+                return;
+            }
+            var status;
+            switch(obj.event){
+                case 'doChecked':
+                    status='normal';
+                    break;
+                case 'doReject':
+                    status='reject';
+                    break;
+            };
+            doDeviceCheck(data,status);
+        });
+        function doDeviceCheck(data,status){
+            layer.load(2);
+            var token = $("meta[name='_csrf_token']").attr("value");
+            var deviceids = [];
+            for (var i = 0; i < data.length; i++) {
+                deviceids.push(data[i].id);
+            }
+            console.log(status);
+            console.log(deviceids);
+           // debugger
+            $.ajax({
+                type: "POST",
+                dataType: "json",
+                url: '[[@{/devicecheck/docheckdevice}]]',
+                data: {
+                    "status": status,
+                    "datalist[]": deviceids,
+                    "_csrf": token
+                },
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                        table.reload('devicecheckTable'); //刷新表格
+                        admin.finishPopupCenter();
+                    } else if (result.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error: function (err) {
+                    admin.errorBack(err);
+                }
+            });
+
+        }
+
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/whitelist/checkdetail.html b/src/main/resources/templates/restaurant/whitelist/checkdetail.html
new file mode 100644
index 0000000..368ec94
--- /dev/null
+++ b/src/main/resources/templates/restaurant/whitelist/checkdetail.html
@@ -0,0 +1,94 @@
+<div id="whitelist-checkdetail-form" lay-filter="whitelist-checkdetail-form-filter" class="layui-form model-form" style="padding: 10px 25px;">
+    <input type="hidden" name="whitelistid" id="search-form-whitelist-checkdetail-whitelistid" th:value="${checkDetailwhitelistid}" />
+    <div class="layui-form-item">
+        <label class="layui-form-label" style="color: red;">审核意见</label>
+        <div class="layui-input-block">
+            <input type="radio" name="checktype" id="form-whitelist-checkdetail-pass" lay-filter="whitelist-checkdetail-filter" value="pass" title="通过" checked/>
+            <input type="radio" name="checktype" id="form-whitelist-checkdetail-reject" lay-filter="whitelist-checkdetail-filter" value="reject" title="驳回"/>
+        </div>
+    </div>
+
+    <div class="layui-form-item" id="form-whitelist-checkdetail-reason-div" style="display: none;">
+        <label class="layui-form-label">驳回原因</label>
+        <div class="layui-input-block">
+            <textarea name="reason" id="form-whitelist-checkdetail-reason" placeholder="请输入内容" class="layui-textarea"></textarea>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <table class="layui-table" id="whitelistCheckdetailTable" lay-filter="whitelistCheckdetailTable-filter"></table>
+    </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="whitelist-checkdetail-form-submit" lay-submit>确认</button>
+    </div>
+</div>
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'table'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var table = layui.table;
+
+        // 表单提交事件
+        form.render("radio");
+        form.on('radio(whitelist-checkdetail-filter)', function (data) {
+            if ('pass' == data.value) {
+                $("#form-whitelist-checkdetail-reason-div").hide();
+            } else {
+                $("#form-whitelist-checkdetail-reason").val('');
+                $("#form-whitelist-checkdetail-reason-div").show();
+            }
+        });
+
+        // 渲染表格
+        var renderDetailTable = function (obj) {
+            table.render({
+                elem: '#whitelistCheckdetailTable',
+                url: '[[@{whitelistcheck/load4checkdetaillist}]]',
+                where: obj,
+                page: true,
+                size: 'sm',
+                height: 384,
+                cols: [
+                    [
+                        {field: 'cardno', title: '市民卡号', align: 'center'},
+                        {field: 'username', title: '姓名', align: 'center'}
+                    ]
+                ]
+            });
+        }
+        renderDetailTable({whitelistid: $("#search-form-whitelist-checkdetail-whitelistid").val()});
+
+        form.on('submit(whitelist-checkdetail-form-submit)', function (data) {
+            var vdata = data.field;
+            console.log(vdata);
+            if ('reject' == vdata.checktype) {
+                if (undefined == vdata.reason || "" == vdata.reason || "" == $.trim(vdata.reason)) {
+                    layer.msg("请填写驳回原因", {icon: 2, time: 1500});
+                    return;
+                }
+            }
+            vdata["_csrf"] = $("meta[name='_csrf_token']").attr("value");
+            admin.go('[[@{/whitelistcheck/checkdetail}]]', vdata, function (result) {
+                layer.closeAll('loading');
+                if (result.code == 200) {
+                    layer.msg(result.msg, {icon: 1});
+                    admin.finishPopupCenter();
+                } else if (result.code == 401) {
+                    layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                    return;
+                } else {
+                    console.log('err:' + result.code);
+                    layer.msg(result.msg, {icon: 2});
+                }
+            }, function (err) {
+                admin.errorBack(err);
+            })
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/whitelist/devbind.html b/src/main/resources/templates/restaurant/whitelist/devbind.html
new file mode 100644
index 0000000..3d8e000
--- /dev/null
+++ b/src/main/resources/templates/restaurant/whitelist/devbind.html
@@ -0,0 +1,120 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">白名单设备绑定</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">白名单管理</a>
+          <a><cite>白名单设备绑定</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-whitelist-devbind-searchkey" class="layui-input search-input" maxlength="20" type="text" style="width: 300px;" placeholder="输入名称、设备名称或设备物理ID"/>&emsp;
+            <button id="btn-whitelist-devbind-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-whitelist-devbind-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
+        </div>
+        <table class="layui-table" id="whitelist-devbind-table" lay-filter="whitelist-devbind-table-filter"></table>
+    </div>
+</div>
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="whitelist-devbind-table-bar">
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        // 渲染表格
+        table.render({
+            elem: '#whitelist-devbind-table',
+            url: '[[@{/whitelistbind/devbindlist}]]',
+            page: true,
+            cols: [
+                [
+                    {field: 'deviceid', title: '设备编号', align: 'center', fixed: 'left', sort: true},
+                    {field: 'devicename', title: '设备名称', align: 'center', fixed: 'left'},
+                    {field: 'devphyid', title: '设备物理ID', align: 'center'},
+                    {field: 'listname', title: '白名单名称', align: 'center', sort: true},
+                    {
+                        field: 'liststatus', title: '白名单状态', align: 'center', templet: function (d) {
+                            if ('uncheck' == d.liststatus) {
+                                return '<span class="layui-badge layui-bg-orange">待审核</span>'
+                            } else if ('normal' == d.liststatus) {
+                                return '<span class="layui-badge layui-bg-green">有效</span>';
+                            } else if ('closed' == d.liststatus) {
+                                return '<span class="layui-badge layui-bg-gray">无效</span>';
+                            } else if ('reject' == d.liststatus) {
+                                return '<span class="layui-badge">驳回</span>';
+                            } else {
+                                return d.liststatus;
+                            }
+                        }
+                    },
+                    {
+                        field: 'createtime', title: '绑定时间', align: 'center', templet: function (d) {
+                            return admin.formatDate(d.createtime);
+                        }
+                    },
+                    {align: 'center', title: '操作', width: 100, toolbar: '#whitelist-devbind-table-bar', fixed: 'right'}
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-whitelist-devbind-search').click(function () {
+            var searchkey = $("#search-whitelist-devbind-searchkey").val();
+            table.reload('whitelist-devbind-table', {where: {searchkey: searchkey}, page: {curr: 1}});
+        });
+
+        $('#btn-whitelist-devbind-add').click(function () {
+            admin.popupCenter({
+                title: "新增白名单绑定关系",
+                path: '[[@{/whitelistbind/load4binddev}]]',
+                area: '900px',
+                finish: function () {
+                    table.reload('whitelist-devbind-table');
+                }
+            });
+        });
+
+        //监听单元格
+        table.on('tool(whitelist-devbind-table-filter)', function (obj) {
+            var data = obj.data;
+
+            if('del' == obj.event){
+                layer.confirm('确定要删除设备绑定的白名单【'+data.listname+'】吗?', {
+                    btn: ['确定', '取消']
+                },function(){
+                    layer.closeAll('dialog');
+                    layer.load(2);
+                    admin.go('[[@{/whitelistbind/deletedevbind}]]', {
+                        id: data.id,
+                        _csrf: $("meta[name='_csrf_token']").attr("value")
+                    }, 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('whitelist-devbind-table');
+                    }, function (err) {
+                        admin.errorBack(err);
+                    });
+                });
+            }
+        });
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/whitelist/whitelist.html b/src/main/resources/templates/restaurant/whitelist/whitelist.html
new file mode 100644
index 0000000..1e07511
--- /dev/null
+++ b/src/main/resources/templates/restaurant/whitelist/whitelist.html
@@ -0,0 +1,156 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">就餐白名单维护</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">就餐白名单管理</a>
+          <a><cite>就餐白名单维护</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-whitelist-listname" class="layui-input search-input" maxlength="20" type="text" placeholder="输入名称查询"/>&emsp;
+            <button id="btn-search-whitelist" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-whitelist-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
+        </div>
+        <table class="layui-table" id="whitelistTable" lay-filter="whitelistTable-filter"></table>
+    </div>
+</div>
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="whitelist-table-bar">
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">查看名单</a>
+    {{# if(d.status=='uncheck' || d.status=='reject'){ }}
+        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+    {{# } else if(d.status=='normal'){ }}
+        <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="closed">关闭</a>
+    {{# } }}
+</script>
+
+<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;
+
+        form.render("select");
+        // 渲染表格
+        table.render({
+            elem: '#whitelistTable',
+            url: '[[@{/whitelist/list}]]',
+            page: true,
+            cols: [
+                [
+                    {field: 'listname', title: '白名单名称', align: 'center', fixed: 'left' },
+                    {
+                        field: 'status', title: '状态', align: 'center', width: 120, sort: true, templet: function (d) {
+                            if ('uncheck' == d.status) {
+                                return '<span class="layui-badge layui-bg-orange">待审核</span>'
+                            } else if ('normal' == d.status) {
+                                return '<span class="layui-badge layui-bg-green">有效</span>';
+                            } else if ('closed' == d.status) {
+                                return '<span class="layui-badge layui-bg-gray">无效</span>';
+                            } else if ('reject' == d.status) {
+                                return '<span class="layui-badge">驳回</span>';
+                            } else {
+                                return d.status;
+                            }
+                        }
+                    },
+                    {field: 'remark', title: '备注',  align: 'center'},
+                    {align: 'center', title: '操作', width: 250, toolbar: '#whitelist-table-bar',  fixed: 'right'}
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-search-whitelist').click(function () {
+            var listname = $("#search-whitelist-listname").val();
+            table.reload('whitelistTable', {where: { listname: listname}, page: {curr: 1}});
+        });
+
+        $('#btn-whitelist-add').click(function () {
+            admin.popupCenter({
+                title: "新增就餐白名单",
+                path: '[[@{/whitelist/load4addwhitelist}]]',
+                area: '500px',
+                finish: function () {
+                    table.reload('whitelistTable');
+                }
+            });
+        });
+
+        //监听单元格
+        table.on('tool(whitelistTable-filter)', function (obj) {
+            var data = obj.data;
+            if('del' == obj.event){
+                layer.confirm('确定直接删除就餐白名单【'+data.listname+'】吗?', {
+                    btn: ['确定', '取消']
+                },function(){
+                    layer.load(2);
+                    admin.go('[[@{/whitelist/deletelist}]]', {
+                        whitelistid: data.whitelistid,
+                        _csrf: $("meta[name='_csrf_token']").attr("value")
+                    }, 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('whitelistTable');
+                    }, function (err) {
+                        admin.errorBack(err)
+                    });
+                });
+
+            }else if('closed' == obj.event){
+                layer.confirm('确定关闭就餐白名单【'+data.listname+'】吗?', {
+                    btn: ['确定', '取消']
+                },function(){
+                    layer.load(2);
+                    admin.go('[[@{/whitelist/closelist}]]', {
+                        whitelistid: data.whitelistid,
+                        _csrf: $("meta[name='_csrf_token']").attr("value")
+                    }, 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('whitelistTable');
+                    }, function (err) {
+                        admin.errorBack(err)
+                    });
+                });
+
+            }else if('detail' == obj.event){
+                admin.popupCenter({
+                    title: "查看名单",
+                    path: '[[@{/whitelist/load4detail}]]?whitelistid=' + data.whitelistid,
+                    area: '600px',
+                    finish: function () {
+                        table.reload('whitelistTable');
+                    }
+                });
+            }
+        });
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/whitelist/whitelistbind.html b/src/main/resources/templates/restaurant/whitelist/whitelistbind.html
new file mode 100644
index 0000000..54caad0
--- /dev/null
+++ b/src/main/resources/templates/restaurant/whitelist/whitelistbind.html
@@ -0,0 +1,178 @@
+<div id="whitelist-devbind-form" lay-filter="whitelist-devbind-filter" class="layui-form model-form"
+     style="padding: 30px 25px 10px 25px;">
+    <div class="layui-form-item">
+        <div class="layui-input-inline" style="width: 450px;">
+            <label class="layui-form-label">白名单</label>
+            <div class="layui-input-block">
+                <select lay-verify="required" class="layui-select" id="whitelist-devbind-form-select-whitelistid">
+                    <option th:each="rl:${whitelists}" th:value="${rl.whitelistid}"
+                            th:text="${rl.listname}"></option>
+                </select>&emsp;
+            </div>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label">选择设备</label>
+        <div class="layui-input-block" style="border: 1px solid #ddd;border-radius: 4px;padding: 10px;">
+            <div class="layui-card-body">
+                <div class="layui-form toolbar">
+                    <div class="layui-input-inline">
+                        <input id="search-whitelist-devbind-form-devgroupid" type="text"
+                               lay-filter="search-whitelist-devbind-form-devgroupid-filter" autocomplete="off"
+                               class="layui-input"/>
+                    </div>
+                    设备：
+                    <input id="search-whitelist-devbind-form-searchkey" type="text" class="layui-input search-input"
+                           maxlength="20" style="width: 200px;" placeholder="输入设备名称或设备物理ID"/>&emsp;
+                    <button id="btn-search-whitelist-devbind-form" class="layui-btn icon-btn"><i
+                            class="layui-icon">&#xe615;</i>搜索
+                    </button>
+                    <button id="btn-reset-whitelist-devbind-form" class="layui-btn layui-btn-primary"><i
+                            class="layui-icon"></i>清空
+                    </button>
+
+                    <table class="layui-table" id="whitelist-devbind-form-table"
+                           lay-filter="whitelist-devbind-form-table-filter"></table>
+                </div>
+            </div>
+        </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="whitelist-devbind-form-submit" lay-submit id="submitbtn">保存</button>
+    </div>
+</div>
+
+<style type="text/css" id="whitelist-devbind-form-css">
+    .layui-form-item .layui-form-checkbox[lay-skin=primary] {
+        margin-top: 0;
+    }
+</style>
+
+<script>
+    layui.use(['layer', 'table', 'admin', 'form', 'treeSelect'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var table = layui.table;
+        var treeSelect = layui.treeSelect;
+        var $ = layui.$
+
+        form.render("select");
+        treeSelect.render({
+            elem: '#search-whitelist-devbind-form-devgroupid',
+            data: '[[@{/whitelistbind/devgrouptree}]]',
+            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: '#whitelist-devbind-form-table',
+            url: '[[@{/whitelistbind/devsearch}]]',
+            size: 'sm',
+            height: 350,
+            page: false,
+            cols: [
+                [
+                    {type: 'checkbox', style: "#whitelist-devbind-form-css", fixed: 'left'},
+                    {field: 'deviceid', title: '设备编号', align: 'center'},
+                    {field: 'devicename', title: '设备名称', align: 'center'},
+                    {field: 'devphyid', title: '设备物理ID', align: 'center'},
+                    {field: 'devgroupname', title: '设备组', align: 'center'}
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-search-whitelist-devbind-form').click(function () {
+            var whitelistid = $("#whitelist-devbind-form-select-whitelistid").val();
+            var devgroupid = $("#search-whitelist-devbind-form-devgroupid").val();
+            var searchkey = $("#search-whitelist-devbind-form-searchkey").val();
+            table.reload('whitelist-devbind-form-table', {
+                where: {
+                    devgroupid: devgroupid,
+                    searchkey: searchkey,
+                    whitelistid: whitelistid
+                }
+            });
+        });
+
+        $("#btn-reset-whitelist-devbind-form").click(function () {
+            $("#search-whitelist-devbind-form-devgroupid").val("");
+            $("#search-whitelist-devbind-form-searchkey").val("");
+            treeSelect.revokeNode('search-whitelist-devbind-form-devgroupid-filter');
+        });
+
+        form.on('submit(whitelist-devbind-form-submit)', function (el) {
+            var whitelistid = $("#whitelist-devbind-form-select-whitelistid").val();
+            var checkStatus = table.checkStatus('whitelist-devbind-form-table');
+            var data = checkStatus.data;
+            var deviceids = [];
+            if ("" == whitelistid) {
+                layer.msg("请选择白名单", {icon: 2, time: 1500});
+                return;
+            }
+            for (var i = 0; i < data.length; i++) {
+                deviceids.push(data[i].deviceid);
+            }
+            if (deviceids.length < 1) {
+                layer.msg("请选择设备", {icon: 2, time: 1500});
+                return;
+            }
+            debugger
+            console.log(whitelistid, deviceids);
+            layer.load(2);
+            var token = $("meta[name='_csrf_token']").attr("value");
+            $.ajax({
+                type: "POST",
+                dataType: "json",
+                url: '[[@{/whitelistbind/dobinddev}]]',
+                data: {
+                    "whitelistid": whitelistid,
+                    "deviceid[]": deviceids,
+                    "_csrf": token
+                },
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1});
+                        table.reload('whitelist-devbind-form-table'); //刷新表格
+                        admin.finishPopupCenter();
+                    } else if (result.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else {
+                        console.log('err:' + result.code);
+                        layer.msg(result.msg, {icon: 2});
+                    }
+                },
+                error: function (err) {
+                    admin.errorBack(err);
+                }
+            });
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/whitelist/whitelistcheck.html b/src/main/resources/templates/restaurant/whitelist/whitelistcheck.html
new file mode 100644
index 0000000..d0136ed
--- /dev/null
+++ b/src/main/resources/templates/restaurant/whitelist/whitelistcheck.html
@@ -0,0 +1,111 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">就餐白名单审核</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">就餐白名单管理</a>
+          <a><cite>就餐白名单审核</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <select id="search-whitelist-check-status">
+                <option value=""> 选择就餐白名单状态</option>
+                <option value="uncheck" selected> 待审核</option>
+                <option value="normal"> 有效</option>
+                <option value="closed"> 无效</option>
+                <option value="reject"> 驳回</option>
+            </select>&emsp;
+            <button id="btn-search-whitelist-check" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
+            </button>
+        </div>
+        <table class="layui-table" id="whitelistcheckTable" lay-filter="whitelistcheckTable-filter"></table>
+    </div>
+</div>
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="whitelist-check-table-bar">
+    {{# if(d.status =='uncheck'){ }}
+        <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="check">审核</a>
+    {{# } else { }}
+        <a class="layui-btn layui-btn-disabled layui-btn-xs">审核</a>
+    {{# } }}
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+
+        form.render("select");
+
+        var renderCheckRuleTable = function(obj){
+            table.render({
+                elem: '#whitelistcheckTable',
+                url: '[[@{/whitelistcheck/checklist}]]',
+                where: obj,
+                page: true,
+                cols: [
+                    [
+                        {field: 'listname', title: '餐白名單名称', align: 'center', fixed: 'left'},
+                        {
+                            field: 'status',
+                            title: '状态',
+                            align: 'center',
+                            width: 120,
+                            sort: true,
+                            templet: function (d) {
+                                if ('uncheck' == d.status) {
+                                    return '<span class="layui-badge layui-bg-orange">待审核</span>'
+                                } else if ('normal' == d.status) {
+                                    return '<span class="layui-badge layui-bg-green">有效</span>';
+                                } else if ('closed' == d.status) {
+                                    return '<span class="layui-badge layui-bg-gray">无效</span>';
+                                } else if ('reject' == d.status) {
+                                    return '<span class="layui-badge">驳回</span>';
+                                } else {
+                                    return d.status;
+                                }
+                            }
+                        },
+                        {
+                            align: 'center',
+                            title: '操作',
+                            width: 250,
+                            toolbar: '#whitelist-check-table-bar',
+                            fixed: 'right'
+                        }
+                    ]
+                ]
+            });
+        }
+        renderCheckRuleTable({status: "uncheck"});
+
+        // 搜索按钮点击事件
+        $('#btn-search-whitelist-check').click(function () {
+            var state = $("#search-whitelist-check-status").val();
+            table.reload('whitelistcheckTable', {where: {status: state}, page: {curr: 1}});
+        });
+
+        //监听单元格
+        table.on('tool(whitelistcheckTable-filter)', function (obj) {
+            var data = obj.data;
+
+            if('check' == obj.event){
+                admin.popupCenter({
+                    title: "查看名单",
+                    path: '[[@{/whitelistcheck/load4checkdetail}]]?whitelistid=' + data.whitelistid,
+                    area: '600px',
+                    finish: function () {
+                        table.reload('whitelistcheckTable', {where: {status: ""}, page: {curr: 1}});
+                    }
+                });
+
+            }
+        });
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/whitelist/whitelistdetail.html b/src/main/resources/templates/restaurant/whitelist/whitelistdetail.html
new file mode 100644
index 0000000..ad45b92
--- /dev/null
+++ b/src/main/resources/templates/restaurant/whitelist/whitelistdetail.html
@@ -0,0 +1,48 @@
+<div class="layui-card">
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input type="hidden" id="search-whitelist-detail-whitelistid" th:value="${whitelistDetailid}" />
+            <input id="search-whitelist-detail-searchkey" class="layui-input search-input" maxlength="20" type="text" style="width: 200px;"
+                   placeholder="输入市民卡号或姓名查询"/>&emsp;
+            <button id="btn-search-whitelist-detail" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
+            </button>
+        </div>
+        <table class="layui-table" id="whitelistDetailTable" lay-filter="whitelistDetailTable-filter"></table>
+    </div>
+</div>
+<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;
+
+        // 渲染表格
+        var renderDetailTable = function (obj) {
+            table.render({
+                elem: '#whitelistDetailTable',
+                url: '[[@{/whitelist/load4detaillist}]]',
+                where: obj,
+                page: true,
+                height: 472,
+                cols: [
+                    [
+                        {field: 'cardno', title: '市民卡号', align: 'center'},
+                        {field: 'username', title: '姓名', align: 'center'}
+                    ]
+                ]
+            });
+        }
+        renderDetailTable({whitelistid: $("#search-whitelist-detail-whitelistid").val()});
+
+        // 搜索按钮点击事件
+        $('#btn-search-whitelist-detail').click(function () {
+            var whitelistid = $("#search-whitelist-detail-whitelistid").val();
+            var searchkey = $("#search-whitelist-detail-searchkey").val();
+            table.reload('whitelistDetailTable', {where: {whitelistid: whitelistid, searchkey: searchkey}, page: {curr: 1}});
+        });
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/whitelist/whitelistform.html b/src/main/resources/templates/restaurant/whitelist/whitelistform.html
new file mode 100644
index 0000000..23e4133
--- /dev/null
+++ b/src/main/resources/templates/restaurant/whitelist/whitelistform.html
@@ -0,0 +1,136 @@
+<div id="whitelist-form" lay-filter="whitelist-form-filter" class="layui-form model-form" style="padding: 10px 25px;">
+
+    <div class="layui-form-item">
+        <label class="layui-form-label"><span style="color: red">* </span>白名单名称</label>
+        <div class="layui-input-block">
+           <input type="text" class="layui-input" name="listname" id="form-whitelist-listname" maxlength="20" style="width: 90%;"
+                  autocomplete="off" lay-verify="required|listname"/>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label"><span style="color: red">* </span>白名单对象</label>
+        <div class="layui-input-inline" style="width: auto;">
+            <button type="button" class="layui-btn upoadfile-btn"  >
+                <i class="layui-icon">&#xe67c;</i>上传名单
+                <input type="file" name="file" id="form-whitelist-records" style="width:auto;"/>
+            </button>
+        </div>
+        <div class="layui-input-inline" style="padding-top: 15px;">
+            <a th:href="@{/discountrule/downloadexcel}" style="color: blue;text-decoration: none;cursor: pointer;">下载名单模板</a>
+        </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="whitelist-form-submit" lay-submit id="submitbtn">保存</button>
+    </div>
+</div>
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'laydate', 'upload'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var laydate = layui.laydate;
+        var upload = layui.upload;
+
+
+        // 表单提交事件
+        form.verify({
+            "listname": function (e) {
+                if(""==e|| ""==$.trim(e)){
+                    return "白名单名称不能为空";
+                }
+/*
+                var msg = "";
+                $.ajax({
+                    type: "GET",
+                    url: '[[@{/whitelist/checklistname}]]',
+                    async: false, //同步提交。不设置则默认异步，异步的话，最后执行ajax
+                    data: {
+                        listname: e,
+                        ruleid: $("#form-whitelist-ruleid").val()
+                    },
+                    success: function (result) {
+                        if (result.code != 200) {
+                            msg = result.msg;
+                        }
+                    },
+                    error: function (error) {
+                        msg = "请求服务器校验账号失败";
+                    }
+                });
+                if (msg != "") {
+                    return msg;
+                }*/
+            }
+        });
+
+        form.on('submit(whitelist-form-submit)', function (data) {
+            debugger
+            var token = $("meta[name='_csrf_token']").attr("value");
+            var vdata = data.field;
+
+            var formData = new FormData();
+            formData.append("listname", vdata.listname);
+
+            var flag = false;
+            var files = $('#form-whitelist-records').prop('files');
+            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]);
+                flag = true;
+            }
+            if (!flag) {
+                layer.msg("请选择名单", {icon: 2, time: 1500});
+                return;
+            }
+            layer.load(2);
+            $.ajax({
+                type: "POST",
+                url: '[[@{/whitelist/addwhitelist}]]',
+                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);
+                }
+            });
+        });
+    });
+</script>
\ No newline at end of file
