diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 2def5f1..2225061 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -8,8 +8,8 @@
 #logging.level.org.hibernate.SQL=DEBUG
 # Postgresql settings
 spring.datasource.platform=postgresql
-#spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restauranttest
-spring.datasource.url=jdbc:postgresql://172.28.201.101:25432/restauranttest
+spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restauranttest
+#spring.datasource.url=jdbc:postgresql://172.28.201.101:25432/restauranttest
 spring.datasource.username=payapi
 spring.datasource.password=123456
 database.dbtype=postgresql
diff --git a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
index fa12126..278ac6d 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
@@ -153,7 +153,6 @@
             resp.setRetcode(ErrorCode.ERRIF_CARD_DISABLED);
             return resp;
         }
-        //TODO:改 这个意思不大
         TCustomer customer=customerService.getCustomerByCustid(tCard.getCustid());
         if(null==customer){
             resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
@@ -183,7 +182,7 @@
 
         tTransdtl.setManagefee(managefee);
         tTransdtl.setTranstime(req.getTermtime());
-        tTransdtl.setCardno("25002885");
+        tTransdtl.setCardno(req.getCardno());
         tTransdtl.setTransmode(req.getTranstype());
 
         tTransdtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_ONLINE);
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 6bfbef1..007d190 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.restaurant.service.ShopSettlementService;
+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;
@@ -73,6 +74,7 @@
     public JsonResult add(@RequestBody TDevice device) {
         if (device != null) {
 
+            device.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_NORMAL);
             return deviceService.saveDevice(device);
         } else {
             return JsonResult.error("添加失败");
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
index aa896c1..ae81ff4 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
@@ -21,7 +21,6 @@
 
     List<TDevice> findAllByDevgroupid(Integer devgroupid);
 
-    List<TDevice> findAllByDevphyid(String devphyid);
 
 
     List<TDevice> findAllByDevgroupidIsNullAndDevicenameContainingOrderById(String name);
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 fe65a84..9ba6670 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
@@ -111,10 +111,10 @@
         if(StringUtil.isEmpty(devphyid)){
             devphyid="";
         }
-        List<TDevice> lst=deviceDao.findAllByDevphyid(devphyid);
-        if(lst.size()>0){
-            return lst.get(0);
-        }
+        TDevice lst=deviceDao.findByDevphyid(devphyid);
+       if(null != lst){
+           return lst;
+       }
         return null;
     }
 
@@ -151,7 +151,6 @@
         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());
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
index 4902e84..f8cee20 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/ThirdPayCall.kt
@@ -103,8 +103,8 @@
             return code
         }
 
-        fun callWechatPay(config: Map<String, String>, paydtl: TUserdtl, time: String, wechattype: String,
-                          realip: String?, qrcode: String?, openid: String?): BaseResp {
+        fun callWechatPay(config: Map<String, String>, paydtl: TUserdtl,  wechattype: String,
+                          realip: String?, openid: String?): BaseResp {
             val code = BaseResp()
             val appid = config["appid"]
             if (appid.isNullOrEmpty()) {
@@ -234,10 +234,10 @@
             }
         }
 
-        fun CallCitizenCardPay(config: Map<String, String?>, paydtl: TUserdtl): CallBackResp {
+        /*fun CallCitizenCardPay(config: Map<String, String?>, paydtl: TUserdtl): CallBackResp {
             val resp = CallBackResp()
             // TODO: 代扣逻辑
             return resp
-        }
+        }*/
     }
 }
\ No newline at end of file
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index e53e5c2..3a1691f 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -106,7 +106,7 @@
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (27, NULL, 1, NULL, '', '/discountrule/devbind', '餐补规则设备绑定', 3, 24);
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (28, NULL, 0, NULL, 'layui-icon-home', '#', '流水管理', 9, -1);
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (29, NULL, 1, NULL, '', '/transdtl/index', '食堂消费流水表', 1, 28);
-INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (30, NULL, 1, NULL, '', '/transdtlrev/index', '交易冲正', NULL, 28);
+INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (30, NULL, 1, NULL, '', '/transdtlrev/index', '申请退款', NULL, 28);
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (1, NULL, 1, NULL, '', '/custtype/index', '客户类型维护', 1, 22);
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (23, NULL, 1, NULL, 'layui-icon-home', '/customer/index', '就餐对象管理', 3, 22);
 INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (10, NULL, 0, NULL, 'layui-icon-util', '#', '参数管理', 3, -1);
