diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 476c4a4..0a33918 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -30,4 +30,4 @@
 payapi.appid=200001
 
 cron.offlinedtl= 0 0/5 * * * ?
-payapi.logintime= 0 0/20 * * * ? 
\ No newline at end of file
+payapi.logintime= 0 0/5 * * * ? 
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java b/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
index dd01d04..e9b9f49 100644
--- a/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
+++ b/src/main/java/com/supwisdom/dlpay/AppLoginRunner.java
@@ -35,9 +35,6 @@
         logger.info("登录核心平台");
         doLogin();
     }
-
-
-    @Scheduled(cron = "${payapi.logintime}")
     private void doLogin() {
         TBusinesspara appid=businessparaDao.findByParakey("payapi.appid");
         TBusinesspara secret=businessparaDao.findByParakey("payapi.secret");
@@ -55,4 +52,17 @@
 
     }
 
+    @Scheduled(cron = "0 0/5 * * * ?")
+    private void doRefresh() {
+        try{
+            ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+            helper.refresh();
+            logger.info("刷新成功");
+        }catch (Exception e){
+            logger.error("刷新成功");
+        }
+
+    }
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java b/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java
index 1c75722..863e8ad 100644
--- a/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java
+++ b/src/main/java/com/supwisdom/dlpay/api/controller/PosPayController.java
@@ -90,14 +90,14 @@
 
     @RequestMapping(value = "/accquery", method = RequestMethod.POST)
     @ResponseBody
-    public PosPayAccqueryResp querysales(@ModelAttribute PosPayAccqueryReq req) {
+    public PosPayAccqueryResp accquery(@ModelAttribute PosPayAccqueryReq req) {
         PosPayAccqueryResp resp = posPayService.AccountQuery(req);
         return resp;
     }
 
     @RequestMapping(value = "/offlinetransdtl", method = RequestMethod.POST)
     @ResponseBody
-    public PosPayOfflineDtlResp querysales(@ModelAttribute PosPayOfflineDtlReq req) {
+    public PosPayOfflineDtlResp offlinetransdtl(@ModelAttribute PosPayOfflineDtlReq req) {
         PosPayOfflineDtlResp resp = posPayService.saveOfflineDtl(req);
         return resp;
     }
@@ -105,7 +105,7 @@
 
     @RequestMapping(value = "/globalparam", method = RequestMethod.POST)
     @ResponseBody
-    public PosPayGolbalParamResp querysales(@ModelAttribute PosPayGolbalParamReq req) {
+    public PosPayGolbalParamResp globalparam(@ModelAttribute PosPayGolbalParamReq req) {
         PosPayGolbalParamResp resp = posPayService.getBusinessParam(req);
         return resp;
     }
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 b0aa58b..22db50d 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
@@ -160,7 +160,7 @@
             cardphyid = req.getCardphyid();
         }
 
-        TCard tCard = cardService.getCardByCardnoAndCardphyid(cardno, cardphyid);
+        TCard tCard = cardService.getCardByCardno(cardno);
         if (null == tCard) {
             resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
             resp.setRetmsg("卡号[" + req.getCardno() + "]不存在");
@@ -662,7 +662,7 @@
             return resp;
         }
 
-        TCard card = cardService.getCardByCardnoAndCardphyid(req.getCardno(), req.getCardphyid());
+        TCard card = cardService.getCardByCardno(req.getCardno());
 
         if (null == card) {
             resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
@@ -742,7 +742,7 @@
             cardphyid = req.getCardphyid();
         }
 
-        TCard tCard = cardService.getCardByCardnoAndCardphyid(cardno, cardphyid);
+        TCard tCard = cardService.getCardByCardno(cardno);
         if (null == tCard) {
             err += "卡号[" + req.getCardno() + "]不存在;";
         } else {
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java
index 8a5c01a..6d50341 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustomerSaveBean.java
@@ -16,6 +16,7 @@
     private String cardno;
     private String cardphyid;
     private String bankcardno;
+    private Integer savecardflag;
 
     public String getCustid() {
         return custid;
@@ -122,6 +123,14 @@
         this.bankcardno = bankcardno;
     }
 
+    public Integer getSavecardflag() {
+        return savecardflag;
+    }
+
+    public void setSavecardflag(Integer savecardflag) {
+        this.savecardflag = savecardflag;
+    }
+
     @Override
     public String toString() {
         return "CustomerSaveBean{" +
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
index b1be118..8497b6f 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustomerController.java
@@ -87,6 +87,7 @@
     @ResponseBody
     public JsonResult add(@RequestBody CustomerSaveBean customer) {
         if (customer != null) {
+            customer.setSavecardflag(0);
             return customerService.saveCustomer(customer);
         } else {
             return JsonResult.error("添加失败");
@@ -114,9 +115,9 @@
     @PreAuthorize("hasPermission('/customer/download','')")
     @ResponseBody
     public JsonResult downloadfile(HttpServletRequest request, HttpServletResponse response) throws Exception{
-        String[] titles0 = {"姓名",	"市名卡号",	"市名卡银行卡号","人员类别号","物理卡号","手机（选填）"
+        String[] titles0 = {"姓名",	"市名卡号",	"市名卡银行卡号","人员类别号","手机（选填）"
         }; //表头
-        String[][] info0 = {{"张三",	"123456",	"3000000","1","12345678","12341234123"
+        String[][] info0 = {{"张三",	"123456",	"3000000","1","12341234123"
         }}; // 示例内容
         String fileName0 = "客户导入模板";// 保存数据
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java
index 088564c..1f672d8 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java
@@ -25,5 +25,7 @@
 
     Integer countByCardno(String cardno);
 
+    Integer countByBankcardno(String bankcardno);
+
     List<TCard>  findAllByCardnoAndCardphyidAndStatus(String cardno,String cardphyid,String status);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java
index 40e6f99..4b7e1f4 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CustomerDao.java
@@ -15,4 +15,6 @@
 
     Page<TCustomer> findAllByCustnameContaining(String custname, Pageable pageable);
 
+    Integer countByCustname(String custname);
+
 }
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 7c1e5d3..05ebb8b 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
@@ -59,7 +59,7 @@
             querySql.append(" and  c.checkstatus = :checkstatus ");
             countSql.append(" and  c.checkstatus = :checkstatus ");
         }
-        querySql.append("and t.status='normal' order by t.cardno ");
+        querySql.append(" order by t.cardno ");
         Query query = entityManager.createNativeQuery(querySql.toString());
         Query countQuery = entityManager.createNativeQuery(countSql.toString());
         if (!StringUtil.isEmpty(param.getCustname())) {
@@ -105,34 +105,37 @@
         cus.setCustname(customer.getCustname());
         cus.setIdno(customer.getIdno());
         cus.setIdtype(customer.getIdtype());
+        cus.setBatchno(customer.getBatchno());
         cus.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
         cus.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_UNCHECK);
         cus = customerDao.save(cus);
         if (null != cus) {
-
-            String date = DateUtil.getNow("yyyyMMdd");
-            List<TCard> cardlist = cardDao.findAllByCustidAndStatus(customer.getCustid(),RestaurantConstant.STATUS_CARD_NORMAL);
-            if (cardlist.size() > 0) {
-                TCard ocard = cardlist.get(0);
-                String cardverno=systemUtilService.getCardverno();
-                ocard.setStatus(RestaurantConstant.STATUS_CARD_LOGOUT);
-                cardDao.save(ocard);
-                saveCardver(cardverno, date, ocard, ocard.getStatus(), ocard.getStatus(), 1);
+            if(0==customer.getSavecardflag()){
+                String date = DateUtil.getNow("yyyyMMdd");
+                List<TCard> cardlist = cardDao.findAllByCustidAndStatus(customer.getCustid(),RestaurantConstant.STATUS_CARD_NORMAL);
+                if (cardlist.size() > 0) {
+                    TCard ocard = cardlist.get(0);
+                    String cardverno=systemUtilService.getCardverno();
+                    ocard.setStatus(RestaurantConstant.STATUS_CARD_LOGOUT);
+                    cardDao.save(ocard);
+                    saveCardver(cardverno, date, ocard, ocard.getStatus(), ocard.getStatus(), 1);
+                    return JsonResult.ok("成功");
+                }
+                TCard card = new TCard();
+                String cardverno = systemUtilService.getCardverno();
+                card.setCardno(customer.getCardno());
+                card.setOpendate(date);
+                card.setCustid(cus.getCustid());
+                card.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
+                card.setTransstatus(RestaurantConstant.STATUS_CARD_NORMAL);
+                //       card.setCardphyid(customer.getCardphyid());
+                card.setCardverno(cardverno);
+                card.setBankcardno(customer.getBankcardno());
+                card.setExpiredate("");
+                card = cardDao.save(card);
+                //       saveCardver(cardverno, date, card, card.getStatus(), RestaurantConstant.STATUS_CARD_NORMAL, 1);
             }
-            TCard card = new TCard();
-            String cardverno = systemUtilService.getCardverno();
-            card.setCardno(customer.getCardno());
-            card.setOpendate(date);
-            card.setCustid(cus.getCustid());
-            card.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
-            card.setTransstatus(RestaurantConstant.STATUS_CARD_NORMAL);
-            //       card.setCardphyid(customer.getCardphyid());
-            card.setCardverno(cardverno);
-            card.setBankcardno(customer.getBankcardno());
-            card.setExpiredate("");
-            card = cardDao.save(card);
-     //       saveCardver(cardverno, date, card, card.getStatus(), RestaurantConstant.STATUS_CARD_NORMAL, 1);
-        }
+      }
 
         return JsonResult.ok("成功");
     }
@@ -159,9 +162,7 @@
         String cardverno = systemUtilService.getCardverno();
         List<TCard> card = cardDao.findAllByCustid(custid);
         for (TCard c : card) {
-            c.setStatus(RestaurantConstant.STATUS_CARD_LOGOUT);
-            c.setCardverno(cardverno);
-            cardDao.save(c);
+            cardDao.deleteById(c.getCardno());
             String date = DateUtil.getNow("yyyyMMdd");
             saveCardver(cardverno, date, c, c.getStatus(), RestaurantConstant.STATUS_CARD_LOGOUT, 0);
         }
@@ -180,7 +181,6 @@
             return JsonResult.error("文件格式错误,请选择excel文件格式(.xls/.xlsx)");
         }
 
-        List<CustomerSaveBean> sList = new ArrayList<>();
 //    InputStream excelstream = new FileInputStream(savePath+"/"+fname);
         InputStream excelstream = file.getInputStream();
         List<Object[][]> oList = null;
@@ -198,28 +198,38 @@
         String msg = "";
         Integer successCnt = 0;
         Integer failCnt = 0;
+        String batchno = DateUtil.getNow("yyyyMMddHHmmss");
         for (Object[][] data : oList) {
             for (int i = 1; i < data.length; i++) {
+                String custname=(String) data[i][0];
+                String bankcardno=(String) data[i][2];
 
                 if (StringUtil.isEmpty((String) data[i][0]) || StringUtil.isEmpty((String) data[i][1]) || StringUtil.isEmpty((String) data[i][2])) {
                     msg = msg + "第" + i + "行，关键字段缺失。<br/>";
                     failCnt += 1;
-                } else if (cardDao.countByCardno((String) data[i][1]) > 0) {
-                    msg = msg + "第" + i + "行，该市名卡已存在。<br/>";
+                } else if (customerDao.countByCustname(custname) > 0&&cardDao.countByBankcardno(bankcardno)>0&&cardDao.countByCardno((String) data[i][1]) > 0) {
+                    msg = msg + "第" + i + "行，该客户在系统中已存在。<br/>";
                     failCnt += 1;
                 } else {
                     CustomerSaveBean d = new CustomerSaveBean();
-                    d.setCustname((String) data[i][0]);
+                    d.setCustname(custname);
                     String cardno = (String) data[i][1];
                     d.setCardno(cardno);
-                    d.setBankcardno((String) data[i][2]);
+                    d.setBankcardno(bankcardno);
                     String custtype = (String) data[i][3];
                     d.setCusttype(Integer.parseInt(custtype));
-                    //                  d.setCardphyid((String) data[i][4]);
-                    if (null != data[i][5]) {
-                        d.setPhone((String) data[i][5]);
+                    if (null != data[i][4]) {
+                        d.setPhone((String) data[i][4]);
                     }
-                    sList.add(d);
+                    if(cardDao.countByCardno((String) data[i][1]) > 0){
+                        d.setSavecardflag(1);
+                        msg = msg + "第" + i+1 + "行，卡号已存在，请手动添加市名卡号和银行卡号。<br/>";
+                    }else{
+                        d.setSavecardflag(0);
+                    }
+                    d.setBatchno(batchno);
+
+                    saveCustomer(d);
                     successCnt += 1;
                 }
             }
@@ -228,14 +238,10 @@
         // resp.setMsg("成功导入了"+sList.size()+"条信息");
         resp.setMsg(String.format(Locale.CHINESE, msg));
         return resp;*/
-        String batchno = DateUtil.getNow("yyyyMMddHHmmss");
-        if (StringUtil.isEmpty(msg)) {
-            for (CustomerSaveBean d : sList) {
-                d.setBatchno(batchno);
-                saveCustomer(d);
-            }
 
-            return JsonResult.ok("成功导入" + sList.size() + "条信息");
+
+        if (StringUtil.isEmpty(msg)) {
+            return JsonResult.ok("成功导入" + oList.size() + "条信息");
         }
         msg = "导入成功" + successCnt + "条，导入失败" + failCnt + "条<br/>" + msg;
 
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 44cc25b..8c00c84 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -121,14 +121,14 @@
 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_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (32, NULL, 1, NULL, '', '/shopsettlement/index', '商户管理', 2, 22);
+INSERT INTO  tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid") VALUES (32, NULL, 1, NULL, '', '/shopsettlement/index', '商户管理', 2, 10);
 
 
 
 
-INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('dinner', '200000', '20190709102922', '晚餐');
-INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('lunch', '140000', '20190709102922', '中午');
-INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('breakfast', '100000', '20190709102803', '早餐');
+INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('dinner', '235959', '20190709102922', '晚餐');
+INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('lunch', '160000', '20190709102922', '中午');
+INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('breakfast', '110000', '20190709102803', '早餐');
 INSERT INTO "tb_oper_role" (id,operid,roleid) VALUES ('2c9cab836a90185f016a901b005f001b', '402882816a8fe884016a8fe8c0530000', '2c9cab836a8af5d5016a8af6ece20000');
 INSERT INTO "tb_oper_role" (id,operid,roleid) VALUES ('ff8080816aaf2ec3016aaf30c1b60007', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
 INSERT INTO "tb_oper_role" (id,operid,roleid) VALUES ('ff8080816ab96daf016ab9743dc60050', '2c9cab836a9666e0016a96694bbb0004', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
@@ -400,6 +400,10 @@
 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_resource"("id", "code", "function_id", "name", "uri") VALUES (73, '''', 32, ''查询'', ''/shopsettlement/index'');
+INSERT INTO "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (92, '''', 32, ''添加'', ''/shopsettlement/loadadd'');
+INSERT INTO "tb_resource"("id", "code", "function_id", "name", "uri") VALUES (93, '''', 32, ''删除'', ''/shopsettlement/delete'');
+
 
 
 
diff --git a/src/main/resources/templates/restaurant/customer/import.html b/src/main/resources/templates/restaurant/customer/import.html
index 2d3d730..9b6ddaa 100644
--- a/src/main/resources/templates/restaurant/customer/import.html
+++ b/src/main/resources/templates/restaurant/customer/import.html
@@ -18,7 +18,7 @@
     </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 layui-btn-primary" type="button" ew-event="closeDialog">关闭</button>
         <button class="layui-btn" lay-filter="customer-form-import" lay-submit id="importbtn">保存</button>
     </div>
 </form>
diff --git a/src/main/resources/templates/restaurant/customer/index.html b/src/main/resources/templates/restaurant/customer/index.html
index 085f88e..4ac3c6c 100644
--- a/src/main/resources/templates/restaurant/customer/index.html
+++ b/src/main/resources/templates/restaurant/customer/index.html
@@ -42,7 +42,6 @@
                 [
                     {field: 'custname', sort: true, width: 120, title: '客户姓名'},
                     {field: 'cardno', sort: true,width: 120, title: '市名卡号'},
-                    {field: 'cardphyid', sort: true, title: '物理卡号'},
                     {field: 'phone',  title: '联系电话'},
                     {field: 'bankcardno', sort: true, width: 200, title: '银行卡号'},
                     {
@@ -58,19 +57,7 @@
                             }
                         }
                     },
-                    {
-                        field: 'status', title: '卡状态', align: 'center', width: 120, sort: true, templet: function (d) {
-                            if ('normal' == d.status) {
-                                return '<span class="layui-badge layui-bg-green">正常</span>';
-                            } else if ('logout' == d.status) {
-                                return '<span class="layui-badge layui-bg-gray">注销</span>';
-                            } else if ('fail' == d.status) {
-                                return '<span class="layui-badge layui-bg-gray">失败</span>';
-                            } else {
-                                return d.status;
-                            }
-                        }
-                    },
+
                     {
                         field: 'custtype', width:100, title: '人员类别', templet: function (item) {
                             if(item.custtype==null){
diff --git a/src/main/resources/templates/restaurant/shopsettlement/index.html b/src/main/resources/templates/restaurant/shopsettlement/index.html
index 80cf02e..140ab53 100644
--- a/src/main/resources/templates/restaurant/shopsettlement/index.html
+++ b/src/main/resources/templates/restaurant/shopsettlement/index.html
@@ -9,7 +9,7 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="shopsettle-search-value" class="layui-input search-input" type="text" placeholder="输入功能名称"/>&emsp;
+            <input id="shopsettle-search-value" class="layui-input search-input" type="text" placeholder="输入商户名称"/>&emsp;
             <button id="shopsettle-btn-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
             <button id="shopsettle-btn-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>添加商户</button>
