diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 7396dff..5196f36 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -5,7 +5,7 @@
 spring.datasource.continue-on-error=true
 #spring.datasource.initialization-mode=always
 spring.jpa.show-sql=true
-#logging.level.org.hibernate.SQL=DEBUG
+logging.level.org.hibernate.SQL=DEBUG
 # Postgresql settings
 spring.datasource.platform=postgresql
 spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restauranttest
@@ -25,10 +25,10 @@
 spring.jackson.serialization.fail-on-empty-beans=false
 
 
-payapi.url=https://yy.dlsmk.cn/payapi
+payapi.url=http://172.28.201.70:10010/payapi
 
 payapi.appid=200001
 
 cron.offlinedtl= 0 0/5 * * * ?
 payapi.logintime= 0 0/5 * * * ? 
-busapp.cardsync.cron=0 0/10 * * * ?
\ No newline at end of file
+busapp.cardsync.cron=0 0/1 * * * ?
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusQuerysalesResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusQuerysalesResp.java
new file mode 100644
index 0000000..9d7df36
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusQuerysalesResp.java
@@ -0,0 +1,51 @@
+package com.supwisdom.dlpay.bus.bean;
+
+import com.supwisdom.dlpay.api.bean.APIResp;
+
+public class BusQuerysalesResp extends BusApiResp {
+  private String salesdate;
+  private Long salesamt;
+  private Long salescnt;
+  private Long managefeeamt;
+  private Long managefeecnt;
+
+  public String getSalesdate() {
+    return salesdate;
+  }
+
+  public void setSalesdate(String salesdate) {
+    this.salesdate = salesdate;
+  }
+
+  public Long getSalesamt() {
+    return salesamt;
+  }
+
+  public void setSalesamt(Long salesamt) {
+    this.salesamt = salesamt;
+  }
+
+  public Long getSalescnt() {
+    return salescnt;
+  }
+
+  public void setSalescnt(Long salescnt) {
+    this.salescnt = salescnt;
+  }
+
+  public Long getManagefeeamt() {
+    return managefeeamt;
+  }
+
+  public void setManagefeeamt(Long managefeeamt) {
+    this.managefeeamt = managefeeamt;
+  }
+
+  public Long getManagefeecnt() {
+    return managefeecnt;
+  }
+
+  public void setManagefeecnt(Long managefeecnt) {
+    this.managefeecnt = managefeecnt;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/controller/BusConsumeController.java b/src/main/java/com/supwisdom/dlpay/bus/controller/BusConsumeController.java
index f178ce2..684039f 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/controller/BusConsumeController.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/controller/BusConsumeController.java
@@ -3,44 +3,48 @@
 import com.supwisdom.dlpay.bus.bean.*;
 import com.supwisdom.dlpay.bus.service.BusConsumeService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 @RestController
 @RequestMapping("/api/bus")
 public class BusConsumeController {
-  @Autowired
-  private BusConsumeService busConsumeService;
+    @Autowired
+    private BusConsumeService busConsumeService;
 
-  @PostMapping("/login")
-  public BusDevLoginResp busLogin(@ModelAttribute BusDevLoginReq req) {
-    return new BusDevLoginResp();
-  }
+    @PostMapping("/login")
+    public BusDevLoginResp busLogin(@ModelAttribute BusDevLoginReq req) {
+        return busConsumeService.doLogin(req);
+    }
 
-  @PostMapping("/heartbeat")
-  public BusHeartBeatResp heartBeat(@ModelAttribute BusHeartBeatReq req) {
-    return new BusHeartBeatResp();
-  }
+    @PostMapping("/heartbeat")
+    public BusHeartBeatResp heartBeat(@ModelAttribute BusHeartBeatReq req) {
+        return busConsumeService.busHeartBeat(req);
+    }
 
-  @PostMapping("/updatesyspara")
-  public BusSysparaResp updateSyspara(@ModelAttribute BusSysparaReq req){
-    return new BusSysparaResp();
-  }
+    @PostMapping("/updatesyspara")
+    public BusSysparaResp updateSyspara(@ModelAttribute BusSysparaReq req) {
+        return busConsumeService.doGetDevpara(req);
+    }
 
-  @PostMapping("/blacklistbitmap")
-  public String downloadBlacklistbitmap(){
-    return "";
-  }
+    @PostMapping("/blacklistbitmap")
+    public String downloadBlacklistbitmap() {
+        return "";
+    }
 
-  @PostMapping("/downloadblacklist")
-  public BusBlacklistResp downloadBlacklist(@ModelAttribute BusBlacklistReq req){
-    return new BusBlacklistResp();
-  }
+    @PostMapping("/downloadblacklist")
+    public BusBlacklistResp downloadBlacklist(@ModelAttribute BusBlacklistReq req) {
+        return busConsumeService.doGetBlacklist(req);
+    }
 
-  @PostMapping("/busdtlupload")
-  public BusDtlUploadResp uploadBusdtl(@ModelAttribute BusdtlUploadReq req){
-    return new BusDtlUploadResp();
-  }
+    @PostMapping("/busdtlupload")
+    public BusDtlUploadResp uploadBusdtl(@ModelAttribute BusdtlUploadReq req) {
+        return busConsumeService.saveOfflineDtl(req);
+    }
+
+    //营业额查询
+    @RequestMapping(value = "/querysales", method = RequestMethod.POST)
+    @ResponseBody
+    public BusQuerysalesResp querysales(@ModelAttribute BusSysparaReq req) {
+        return  busConsumeService.busQuerySales(req);
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/domain/TOfflineBusdtl.java b/src/main/java/com/supwisdom/dlpay/bus/domain/TOfflineBusdtl.java
index f068de4..6af8665 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/domain/TOfflineBusdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/domain/TOfflineBusdtl.java
@@ -26,7 +26,7 @@
   @Column(name = "dtltype", nullable = false, length = 10)
   private String dtltype;  //card-刷卡流水;qrcode-刷二维码流水
 
-  @Column(name = "termseqno", length = 20)
+  @Column(name = "cardno", length = 20)
   private String cardno;
 
   @Column(name = "cardphyid", length = 20)
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
index 5da2be4..7033b6a 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
@@ -13,5 +13,5 @@
 
     BusDtlUploadResp saveOfflineDtl(BusdtlUploadReq req);
 
-
+    BusQuerysalesResp busQuerySales(BusSysparaReq req);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
index f9104e9..6c71ae7 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
@@ -6,8 +6,10 @@
 import com.supwisdom.dlpay.bus.bean.*;
 import com.supwisdom.dlpay.bus.dao.CitizenCardDao;
 import com.supwisdom.dlpay.bus.dao.CitizenCardverDao;
+import com.supwisdom.dlpay.bus.dao.OfflineBusdtlDao;
 import com.supwisdom.dlpay.bus.domain.TCitizenCard;
 import com.supwisdom.dlpay.bus.domain.TCitizenCardver;
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
 import com.supwisdom.dlpay.bus.service.BusConsumeService;
 import com.supwisdom.dlpay.bus.service.CitizenCardService;
 import com.supwisdom.dlpay.bus.util.BusConstant;
@@ -20,6 +22,8 @@
 import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
 import com.supwisdom.dlpay.paysdk.proxy.TransactionProxy;
 import com.supwisdom.dlpay.paysdk.proxy.UserProxy;
+import com.supwisdom.dlpay.restaurant.bean.ManageFeeAmtBean;
+import com.supwisdom.dlpay.restaurant.bean.SalesAmtBean;
 import com.supwisdom.dlpay.restaurant.dao.*;
 import com.supwisdom.dlpay.restaurant.domain.*;
 import com.supwisdom.dlpay.restaurant.service.*;
@@ -44,7 +48,7 @@
     @Autowired
     private TransDtlService transDtlService;
     @Autowired
-    private OfflineTransDtlService offlineTransDtlService;
+    private OfflineBusdtlDao offlineBusdtlDao;
     @Autowired
     private SysparaDao sysparaDao;
     @Autowired
@@ -165,7 +169,7 @@
         device.setCardverno(req.getCardverno());
         deviceService.saveDevice(device);
         List<BusCardverBean> cardverFlags = new ArrayList<>();
-        TSyspara maxcardver = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_MAXCARDVERNO); //非等待锁
+        TSyspara maxcardver = sysparaDao.findByParaid(BusConstant.SYSPARAID_MAXBLACKCARDVERNO);
 
         String maxCardverno = maxcardver.getParaval();
         Integer count = req.getMaxcount();
@@ -226,14 +230,16 @@
             resp.setRetmsg("未配置默认参数");
             return resp;
         }
+        TSyspara maxcardver = sysparaDao.findByParaid(BusConstant.SYSPARAID_MAXBLACKCARDVERNO);
 
+        String maxCardverno = maxcardver.getParaval();
 
         resp.setRetcode(ErrorCode.ERRIF_OK);
         resp.setRetmsg("心跳成功");
         resp.setSystime(datetime);
         resp.setParaverno(group.getVerno().intValue());
         resp.setParagroupid(group.getGroupid());
-        resp.setCardverno(req.getCardverno());
+        resp.setCardverno(maxCardverno);
         return resp;
 
     }
@@ -241,63 +247,99 @@
     @Override
     public BusDtlUploadResp saveOfflineDtl(BusdtlUploadReq req) {
         BusDtlUploadResp resp = new BusDtlUploadResp();
-        TOfflineTransDtl transDtl = new TOfflineTransDtl();
+        TOfflineBusdtl transDtl = new TOfflineBusdtl();
         transDtl.setTransdate(req.getTransdate());
         transDtl.setTranstime(req.getTranstime());
         transDtl.setBillno(systemUtilService.getRefno());
         transDtl.setCardno(req.getCardno());
-        transDtl.setRevflag(0);
-        transDtl.setTermsqlno(req.getTermseqno());
-        String err = "";
-        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (null == device) {
-            err += "设备物理ID不存在;";
-        }
-        if (1 != device.getState()) {
-            err += "设备状态错误;";
-        }
-        if (!BusConstant.STATUS_NORMAL.equals(device.getCheckstatus())) {
-            err += "设备审核未通过;";
-        }
-        if (!"".equals(err)) {
-            transDtl.setAttr1(err);
-            offlineTransDtlService.saveOfflineTransdtl(transDtl);
+        transDtl.setTermseqno(req.getTermseqno());
+        transDtl.setCollecttime(systemUtilService.getSysdatetime().getHostdatetime());
+        transDtl.setCardno(req.getCardno());
+        transDtl.setTranstime(req.getTranstime());
+        transDtl.setTransdate(req.getTransdate());
+        transDtl.setAmount(req.getAmount() / 100.0);
+        transDtl.setDtltype("card");
+        transDtl.setDtlstat(req.getStatus());
+        transDtl.setQrcode("");
+
+        TCitizenCard tCard = cardDao.findByCardno(req.getCardno());
+        if (null == tCard) {
+            transDtl.setErrcode(BusConstant.BUS_OFFLINE_NOUSER);
+            transDtl.setErrmsg("卡号不存在");
+
+            offlineBusdtlDao.save(transDtl);
             resp.setRetmsg("保存成功");
             resp.setRetcode(ErrorCode.ERRIF_OK);
             return resp;
         }
-        Double amount = req.getAmount() / 100.0;
+        transDtl.setPayerid(tCard.getPayerid());
+        transDtl.setCardphyid(tCard.getCardphyid());
+        transDtl.setPayername(tCard.getUsername());
 
-        String cardno;
+        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        if (null == device) {
+            transDtl.setErrcode(BusConstant.BUS_OFFLINE_NODEVICE);
+            transDtl.setErrmsg("设备物理ID不存在");
 
-        cardno = req.getCardno();
-
-        TCitizenCard tCard = cardDao.findByCardno(cardno);
-        if (null == tCard) {
-            err += "卡号[" + req.getCardno() + "]不存在;";
-        } else {
-            transDtl.setCustname(tCard.getUsername());
+            offlineBusdtlDao.save(transDtl);
+            resp.setRetmsg("保存成功");
+            resp.setRetcode(ErrorCode.ERRIF_OK);
+            return resp;
         }
-        transDtl.setAmount(amount);
-
-        if (device.getState() != 1) {
-            err += "设备状态错误;";
-        } else {
-            transDtl.setTermid(device.getId());
-            transDtl.setShopid(device.getShopid());
+        if (1 != device.getState()) {
+            transDtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
+            transDtl.setErrmsg("设备状态异常");
+            offlineBusdtlDao.save(transDtl);
+            resp.setRetmsg("保存成功");
+            resp.setRetcode(ErrorCode.ERRIF_OK);
+            return resp;
         }
+        if (!BusConstant.STATUS_NORMAL.equals(device.getCheckstatus())) {
+            transDtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
+            transDtl.setErrmsg("设备审核未通过");
+            offlineBusdtlDao.save(transDtl);
+            resp.setRetmsg("保存成功");
+            resp.setRetcode(ErrorCode.ERRIF_OK);
+            return resp;
+        }
+
+        transDtl.setTermid(device.getId());
+        transDtl.setDevphyid(device.getDevphyid());
+        transDtl.setMerchaccno(device.getShopid());
 
         transDtl.setStatus(BusConstant.STATUS_INIT);
-        transDtl.setAttr1(err);
-        transDtl.setTransmode(BusConstant.TRANSMODE_BUS);
-        offlineTransDtlService.saveOfflineTransdtl(transDtl);
-
+        offlineBusdtlDao.save(transDtl);
         resp.setRetcode(ErrorCode.ERRIF_OK);
         resp.setRetmsg("保存成功");
         resp.setTermseqno(req.getTermseqno());
         return resp;
     }
 
+    @Override
+    public BusQuerysalesResp busQuerySales(BusSysparaReq req) {
+        BusQuerysalesResp resp = new BusQuerysalesResp();
+        TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+        BusApiResp apiResp = checkDevice(resp, device);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
+
+        SalesAmtBean salesAmtBean = transDtlService.getSalesToday(req.getTermdate(), device.getId());
+   //     ManageFeeAmtBean feeAmtBean = transDtlService.getManageFeeToday(req.getTermdate(), device.getId());
+
+
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        resp.setRetmsg("返回成功");
+   //     resp.setManagefeeamt(feeAmtBean.getManagefeeamt());
+   //     resp.setManagefeecnt(feeAmtBean.getManagefeecnt());
+        resp.setSalesamt(salesAmtBean.getSalesamt());
+        resp.setSalescnt(salesAmtBean.getSalescnt());
+        resp.setSalesdate(req.getTermdate());
+        return resp;
+    }
+
 
     private BusApiResp checkDevice(BusApiResp resp, TDevice device) {
         if (null == device) {
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
index c826a47..6039d60 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
@@ -38,4 +38,8 @@
 
   public final static String TRANSMODE_BUS="bus";
 
+  public final static String BUS_OFFLINE_NODEVICE = "11";
+  public final static String BUS_OFFLINE_NOUSER = "12";
+  public final static String BUS_OFFLINE_DEVICEERROR = "13";
+
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 8e9ffce..bd7e1e4 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -129,6 +129,7 @@
                         .antMatchers("/api/user/**").hasRole("THIRD_ADMIN")
                         .antMatchers("/api/shop/**").hasRole("THIRD_SHOP")
                         .antMatchers("/api/pos/**").hasRole("THIRD_SHOP")
+                        .antMatchers("/api/bus/**").hasRole("THIRD_SHOP")
                         .anyRequest().hasRole("THIRD_COMMON")
                         .and()
                         .csrf().ignoringAntMatchers("/api/**")
