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
