diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
index e5d0afc..0d31ce1 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
@@ -4,6 +4,10 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface OfflineBusdtlDao extends JpaRepository<TOfflineBusdtl, String> {
+
+    List<TOfflineBusdtl> findAllByTransdateAndStatus(String transdate,String status);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
index 1f38b4d..73bfad1 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
@@ -4,6 +4,9 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface OnlineBusdtlDao extends JpaRepository<TOnlineBusdtl, String> {
+    List<TOnlineBusdtl> findAllByTransdateAndStatus(String transdate,String status);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
index ede535e..0a4990f 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
@@ -25,7 +25,7 @@
   @Column(name = "TRANS_STATUS", nullable = false, length = 20)
   private String transStatus;
 
-  @Column(name = "PAYERID", length = 31)
+  @Column(name = "PAYERID", length = 32)
   private String payerid;
 
   @Column(name = "USERNAME", length = 200)
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 7033b6a..725a339 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
@@ -1,6 +1,12 @@
 package com.supwisdom.dlpay.bus.service;
 
 import com.supwisdom.dlpay.bus.bean.*;
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 public interface BusConsumeService {
     BusDevLoginResp doLogin(BusDevLoginReq req);
@@ -11,7 +17,16 @@
 
     BusHeartBeatResp busHeartBeat(BusHeartBeatReq req);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     BusDtlUploadResp saveOfflineDtl(BusdtlUploadReq req);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     BusQuerysalesResp busQuerySales(BusSysparaReq req);
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    void saveOfflineBusdtlAndOnlinedtl(TOfflineBusdtl offlineBusdtl, TOnlineBusdtl onlineBusdtl);
+
+    List<TOfflineBusdtl> getUncheckOfflineTransdtl(String transdate);
+
+    List<TOnlineBusdtl> getSubmittingOnlineTransdtl(String transdate);
 }
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 6c71ae7..712677c 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
@@ -7,9 +7,11 @@
 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.dao.OnlineBusdtlDao;
 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.domain.TOnlineBusdtl;
 import com.supwisdom.dlpay.bus.service.BusConsumeService;
 import com.supwisdom.dlpay.bus.service.CitizenCardService;
 import com.supwisdom.dlpay.bus.util.BusConstant;
@@ -52,27 +54,14 @@
     @Autowired
     private SysparaDao sysparaDao;
     @Autowired
-    private MealTypeDao mealTypeDao;
+    private OnlineBusdtlDao onlineBusdtlDao;
     @Autowired
     private DevparaBindDao devparaBindDao;
     @Autowired
     private DeviceParamService deviceParamService;
     @Autowired
     private ShopSettlementService shopSettlementService;
-    @Autowired
-    private BusinessparaDao businessparaDao;
-    @Autowired
-    private DeviceDiscountRuleService deviceDiscountRuleService;
-    @Autowired
-    private CitizenCardPayProxy citizenCardPayProxy;
-    @Autowired
-    private TransactionProxy transactionProxy;
-    @Autowired
-    private CitizenCardService cardService;
-    @Autowired
-    private UserProxy userProxy;
-    @Autowired
-    private CustomerDao customerDao;
+
     @Autowired
     private CitizenCardDao cardDao;
     @Autowired
@@ -340,6 +329,23 @@
         return resp;
     }
 
+    @Override
+    public void saveOfflineBusdtlAndOnlinedtl(TOfflineBusdtl offlineBusdtl, TOnlineBusdtl onlineBusdtl) {
+        offlineBusdtlDao.save(offlineBusdtl);
+        onlineBusdtlDao.save(onlineBusdtl);
+
+    }
+
+    @Override
+    public List<TOfflineBusdtl> getUncheckOfflineTransdtl(String transdate) {
+        return offlineBusdtlDao.findAllByTransdateAndStatus(transdate,BusConstant.STATUS_INIT);
+    }
+
+    @Override
+    public List<TOnlineBusdtl> getSubmittingOnlineTransdtl(String transdate) {
+        return onlineBusdtlDao.findAllByTransdateAndStatus(transdate,BusConstant.STATUS_WAIT);
+    }
+
 
     private BusApiResp checkDevice(BusApiResp resp, TDevice device) {
         if (null == device) {
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
index b3eb1bc..c888a08 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
@@ -151,7 +151,7 @@
 
     SystemDateTime dt = systemUtilService.getSysdatetime();
     TCitizenCard card = citizenCardDao.findByCardno(cardInfo.getCardno());
-    if (null != card) {
+    if (null == card) {
       cardverno = doSwithCardverno(maxcardver.getParaval());
       card = new TCitizenCard(cardInfo, cardverno, dt.getSysdate());
       citizenCardDao.save(card);
@@ -174,7 +174,8 @@
         cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
       }
       cardver.setStatus(BusConstant.STATUS_CARDVER_NORMAL);
-      cardver.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+      String lastsaved=systemUtilService.getSysdatetime().getHostdatetime();
+      cardver.setLastsaved(lastsaved);
       citizenCardverDao.save(cardver);
     } else {
       boolean updFlag = false;
@@ -218,8 +219,6 @@
       if (!card.getStatus().equals(cardInfo.getCardstatus()) || !card.getTransStatus().equals(cardInfo.getTransstatus())) {
         //卡状态有变化
         updFlag = true;
-        card.setStatus(cardInfo.getCardstatus());
-        card.setTransStatus(cardInfo.getTransstatus());
 
         TCitizenCardver cardver = null;
         if (BusConstant.STATUS_CARDVER_CLOSED.equals(cardInfo.getCardstatus()) || BusConstant.STATUS_CARDVER_CLOSED.equals(cardInfo.getTransstatus())) {
@@ -233,8 +232,8 @@
             cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
             citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_REGISTER, card.getCardno(), cardverno); //注册记录置为无效
           }
-        } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
-          if (!BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) || !BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus())) {
+        } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(cardInfo.getTransstatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(cardInfo.getCardstatus())) {
+          if (!BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) || !BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
             //卡状态由异常变正常
             cardverno = doSwithCardverno(maxcardver.getParaval());
             card.setCardverno(cardverno);
@@ -271,7 +270,9 @@
       }
 
       if (updFlag) {
-        citizenCardDao.save(card); //更新卡表
+          card.setStatus(cardInfo.getCardstatus());
+          card.setTransStatus(cardInfo.getTransstatus());
+          citizenCardDao.save(card); //更新卡表
       }
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java b/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java
new file mode 100644
index 0000000..86793f2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java
@@ -0,0 +1,166 @@
+package com.supwisdom.dlpay.bus.task;
+
+import com.supwisdom.dlpay.api.bean.*;
+import com.supwisdom.dlpay.bus.dao.OfflineBusdtlDao;
+import com.supwisdom.dlpay.bus.dao.OnlineBusdtlDao;
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
+import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import com.supwisdom.dlpay.bus.util.BusConstant;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
+import com.supwisdom.dlpay.paysdk.proxy.TransactionProxy;
+import com.supwisdom.dlpay.restaurant.domain.TOfflineTransDtl;
+import com.supwisdom.dlpay.restaurant.domain.TTransDtl;
+import com.supwisdom.dlpay.restaurant.service.OfflineTransDtlService;
+import com.supwisdom.dlpay.restaurant.service.TransDtlService;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+@Configuration      //1.主要用于标记配置类，兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+public class BusPayTask {
+    private static final Logger logger = LoggerFactory.getLogger(BusPayTask.class);
+
+
+    @Autowired
+    private TransDtlService transDtlService;
+    @Autowired
+    private OnlineBusdtlDao onlineBusdtlDao;
+    @Autowired
+    private BusConsumeService busConsumeService;
+    @Autowired
+    private CitizenCardPayProxy citizenCardPayProxy;
+    @Autowired
+    private SystemUtilService systemUtilService;
+    @Autowired
+    private TransactionProxy transactionProxy;
+
+    @Scheduled(cron = "0 0/1 * * * ?")
+    private void submitOfflineDtlTask() {
+        String date = DateUtil.getNow("yyyyMMdd");
+        List<TOfflineBusdtl> dtls = busConsumeService.getUncheckOfflineTransdtl(date);
+        logger.info("正在上传" + dtls.size() + "笔流水");
+        if (dtls.size() > 0) {
+            for (TOfflineBusdtl dtl : dtls) {
+
+                TOnlineBusdtl tTransDtl = gettTransDtl(dtl);
+
+                CitizenCardPayinitParam param = new CitizenCardPayinitParam();
+                param.setBillno(dtl.getBillno());
+                param.setShopaccno(dtl.getMerchaccno());
+                param.setTransdate(dtl.getTransdate());
+                param.setTranstime(dtl.getTranstime());
+                param.setCardNo(dtl.getCardno());
+                param.setDtltype("bus");
+                Double amt = dtl.getAmount() * 100;
+                param.setAmount(amt.intValue());
+                logger.info(dtl.getBillno() + "开始消费逻辑");
+
+                CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
+                if (response.getRetcode() != 0) {
+                    saveFailTransdtls(dtl, tTransDtl, response);
+                    logger.info(dtl.getBillno() + "初始化失败," + response.getRetcode() + "," + response.getRetmsg() + "," + response.getException());
+                    continue;
+                }
+                CitizenCardPayfinishParam finishparam = new CitizenCardPayfinishParam();
+                finishparam.setRefno(response.getRefno());
+                CitizenPayResponse finishresp = citizenCardPayProxy.citizencardPayFinish(finishparam);
+                if (finishresp.getRetcode() != 0) {
+                    saveFailTransdtls(dtl, tTransDtl, finishresp);
+                    logger.info(dtl.getBillno() + "消费确认失败," + finishresp.getRetcode() + "," + finishresp.getRetmsg() + "," + finishresp.getException());
+                    continue;
+                }
+                tTransDtl.setAccdate(date);
+                tTransDtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
+                tTransDtl.setCoreStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                tTransDtl.setRefno(response.getRefno());
+                dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                busConsumeService.saveOfflineBusdtlAndOnlinedtl(dtl,tTransDtl);
+            }
+        }
+    }
+
+    private TOnlineBusdtl gettTransDtl(TOfflineBusdtl dtl) {
+        TOnlineBusdtl tTransDtl = new TOnlineBusdtl();
+        tTransDtl.setManagefee(dtl.getManagefee());
+        tTransDtl.setAmount(dtl.getAmount());
+        tTransDtl.setCardno(dtl.getCardno());
+        tTransDtl.setStatus(dtl.getStatus());
+        tTransDtl.setPayerid(dtl.getPayerid());
+        tTransDtl.setBillno(dtl.getBillno());
+        tTransDtl.setTermseqno(dtl.getTermseqno());
+        tTransDtl.setMerchaccno(dtl.getMerchaccno());
+        tTransDtl.setTransdate(dtl.getTransdate());
+        tTransDtl.setTranstime(dtl.getTranstime());
+        tTransDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
+        tTransDtl.setTransmode("card");
+        tTransDtl.setPayername(dtl.getPayername());
+        tTransDtl.setTermid(dtl.getTermid());
+        tTransDtl.setTransdate(dtl.getTransdate());
+        tTransDtl.setTranstime(dtl.getTranstime());
+        tTransDtl.setTranstype("none");
+        tTransDtl.setRevflag(0);
+        tTransDtl.setManagefee(dtl.getManagefee());
+        return tTransDtl;
+    }
+
+    private void saveFailTransdtls(TOfflineBusdtl dtl, TOnlineBusdtl tTransDtl, CitizenPayResponse finishresp) {
+        String status;
+        String attr;
+        if(RestaurantConstant.TRANSDTL_STATUS_WIT==finishresp.getRetcode()){
+            status=RestaurantConstant.STATUS_TRANSDTL_WAIT;
+            attr="";
+            tTransDtl.setRefno(finishresp.getRefno());
+        }else{
+            status=RestaurantConstant.STATUS_TRANSDTL_FAIL;
+            attr=finishresp.getRetmsg() + "," + finishresp.getException()+","+finishresp.getRetcode();
+        }
+        dtl.setStatus(status);
+        dtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
+        dtl.setErrmsg(attr);
+        busConsumeService.saveOfflineBusdtlAndOnlinedtl(dtl,tTransDtl);
+    }
+
+
+    @Scheduled(cron = "0 0/2 * * * ?")
+    private void checkWipDtls() {
+        String date = DateUtil.getNow("yyyyMMdd");
+        List<TOnlineBusdtl> dtls = busConsumeService.getSubmittingOnlineTransdtl(date);
+        logger.info("正在核对" + dtls.size() + "笔未上传流水");
+        if (dtls.size() > 0) {
+            for (TOnlineBusdtl dtl : dtls) {
+                QueryDtlResultParam param = new QueryDtlResultParam();
+                param.setShopaccno(dtl.getMerchaccno());
+                param.setBillno(dtl.getBillno());
+                param.setRefno(dtl.getRefno());
+                QueryTransDtlResponse resp = transactionProxy.queryDtlResult(param);
+                logger.info(dtl.getBillno()+":status==="+resp.getStatus());
+
+                if(RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(resp.getStatus())){
+                    logger.info(dtl.getBillno()+":"+resp.getRetcode()+":"+resp.getRetmsg());
+                }else if (RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(resp.getStatus())){
+                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                }else{
+                    dtl.setRemark(resp.getRetmsg());
+                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+                }
+                onlineBusdtlDao.save(dtl);
+
+            }
+        }
+
+    }
+
+}
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 6039d60..ea512b7 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
@@ -35,7 +35,7 @@
 
   public final static String STATUS_NORMAL="normal";
   public final static String STATUS_INIT="init";
-
+  public final static String STATUS_WAIT="wip";
   public final static String TRANSMODE_BUS="bus";
 
   public final static String BUS_OFFLINE_NODEVICE = "11";
