diff --git a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
index 0f15938..37aaef4 100644
--- a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
+++ b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.restaurant.service.OfflineTransDtlService;
 import com.supwisdom.dlpay.restaurant.service.TransDtlService;
 import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,53 +38,38 @@
     private CitizenCardPayProxy citizenCardPayProxy;
 
     @Scheduled(cron = "${cron.offlinedtl}")
-    private void submitOfflineDtlTask(){
-        String date=DateUtil.getNow("yyyyMMdd");
-        List<TOfflineTransDtl> dtls=offlineTransDtlService.getUncheckOfflineTransdtl(date);
-        logger.info("正在上传"+dtls.size()+"笔流水");
-        if(dtls.size()>0){
-            for(TOfflineTransDtl dtl:dtls){
+    private void submitOfflineDtlTask() {
+        String date = DateUtil.getNow("yyyyMMdd");
+        List<TOfflineTransDtl> dtls = offlineTransDtlService.getUncheckOfflineTransdtl(date, RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
+        logger.info("正在上传" + dtls.size() + "笔流水");
+        if (dtls.size() > 0) {
+            for (TOfflineTransDtl dtl : dtls) {
 
-                TTransDtl tTransDtl=new TTransDtl();
-                tTransDtl.setManagefee(dtl.getManagefee());
-                tTransDtl.setTransmode("offline");
-                tTransDtl.setAmount(dtl.getAmount());
-                tTransDtl.setCardno(dtl.getCardno());
-                tTransDtl.setStatus(dtl.getStatus());
-                tTransDtl.setBillno(dtl.getBillno());
-                tTransDtl.setTermsqlno(dtl.getTermsqlno());
-                tTransDtl.setMealtype(dtl.getMealtype());
-                tTransDtl.setCusttype(dtl.getCusttype());
-                tTransDtl.setShopid(dtl.getShopid());
-                tTransDtl.setTransdate(dtl.getTransdate());
-                tTransDtl.setTranstime(dtl.getTranstime());
-                tTransDtl.setCustname(dtl.getCustname());
-                tTransDtl.setTermid(dtl.getTermid());
-                tTransDtl.setRuleid(dtl.getRuleid());
-                tTransDtl.setManagefee(dtl.getManagefee());
+                TTransDtl tTransDtl = gettTransDtl(dtl);
 
+                tTransDtl.setTransmode(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
 
-                CitizenCardPayinitParam param=new CitizenCardPayinitParam();
+                CitizenCardPayinitParam param = new CitizenCardPayinitParam();
                 param.setBillno(dtl.getBillno());
                 param.setShopaccno(dtl.getShopid());
                 param.setTransdate(dtl.getTransdate());
                 param.setTranstime(dtl.getTranstime());
                 param.setCardNo(dtl.getCardno());
                 param.setDtltype("canteen");
-                Double amt=dtl.getAmount()*100;
+                Double amt = dtl.getAmount() * 100;
                 param.setAmount(amt.intValue());
-                CitizenPayResponse response=citizenCardPayProxy.citizencardPayinit(param);
-                if(response.getRetcode()!=0){
+                CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
+                if (response.getRetcode() != 0) {
                     saveTransdtls(dtl, tTransDtl, response);
-                    logger.info(dtl.getBillno()+"初始化失败,"+response.getRetcode()+","+response.getRetmsg()+","+ response.getException());
+                    logger.info(dtl.getBillno() + "初始化失败," + response.getRetcode() + "," + response.getRetmsg() + "," + response.getException());
                     continue;
                 }
-                CitizenCardPayfinishParam finishparam=new CitizenCardPayfinishParam();
+                CitizenCardPayfinishParam finishparam = new CitizenCardPayfinishParam();
                 finishparam.setRefno(response.getRefno());
-                CitizenPayResponse finishresp=citizenCardPayProxy.citizencardPayFinish(finishparam);
-                if(finishresp.getRetcode()!=0){
+                CitizenPayResponse finishresp = citizenCardPayProxy.citizencardPayFinish(finishparam);
+                if (finishresp.getRetcode() != 0) {
                     saveTransdtls(dtl, tTransDtl, finishresp);
-                    logger.info(dtl.getBillno()+"消费缺认失败,"+finishresp.getRetcode()+","+finishresp.getRetmsg()+","+ finishresp.getException());
+                    logger.info(dtl.getBillno() + "消费缺认失败," + finishresp.getRetcode() + "," + finishresp.getRetmsg() + "," + finishresp.getException());
                     continue;
                 }
                 tTransDtl.setAccdate(date);
@@ -95,8 +81,39 @@
 
         }
 
+        List<TOfflineTransDtl> revdtls = offlineTransDtlService.getUncheckOfflineTransdtl(date, RestaurantConstant.TRANSTYPE_TRANSDTL_REVERT);
+        if (revdtls.size() > 0) {
+            for (TOfflineTransDtl revdtl : revdtls) {
+                TTransDtl tTransDtl = gettTransDtl(revdtl);
+                tTransDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_REVERT);
+                transDtlService.doRevertTransdtl(tTransDtl);
+            }
+        }
+
     }
 
+    @NotNull
+    private TTransDtl gettTransDtl(TOfflineTransDtl dtl) {
+        TTransDtl tTransDtl = new TTransDtl();
+        tTransDtl.setManagefee(dtl.getManagefee());
+        tTransDtl.setAmount(dtl.getAmount());
+        tTransDtl.setCardno(dtl.getCardno());
+        tTransDtl.setStatus(dtl.getStatus());
+        tTransDtl.setBillno(dtl.getBillno());
+        tTransDtl.setTermsqlno(dtl.getTermsqlno());
+        tTransDtl.setMealtype(dtl.getMealtype());
+        tTransDtl.setCusttype(dtl.getCusttype());
+        tTransDtl.setShopid(dtl.getShopid());
+        tTransDtl.setTransdate(dtl.getTransdate());
+        tTransDtl.setTranstime(dtl.getTranstime());
+        tTransDtl.setCustname(dtl.getCustname());
+        tTransDtl.setTermid(dtl.getTermid());
+        tTransDtl.setRuleid(dtl.getRuleid());
+        tTransDtl.setManagefee(dtl.getManagefee());
+        return tTransDtl;
+    }
+
+
     private void saveTransdtls(TOfflineTransDtl dtl, TTransDtl tTransDtl, CitizenPayResponse finishresp) {
         dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
         dtl.setAttr1(finishresp.getRetmsg() + "," + finishresp.getException());
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
index 74f128a..7eb378c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
@@ -30,7 +30,7 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
-    List<TOfflineTransDtl> getUncheckOfflineTransdtl(String accdate);
+    List<TOfflineTransDtl> getUncheckOfflineTransdtl(String transdate,String transtype);
 
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
index 8c5ea23..b6a635d 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
@@ -93,7 +93,6 @@
         }else{
             targetDtl=new TOfflineTransDtl();
         }
-        Integer osqlno=targetDtl.getTermsqlno();
         TOfflineTransDtl revDtl=new TOfflineTransDtl();
         BeanUtils.copyProperties(targetDtl,revDtl);
         revDtl.setBillno(systemUtilService.getRefno());
@@ -112,7 +111,7 @@
     }
 
     @Override
-    public List<TOfflineTransDtl> getUncheckOfflineTransdtl(String accdate) {
-        return transDtlDao.findAllByTransdateAndStatusAndTranstype(accdate,RestaurantConstant.STATUS_TRANSDTL_INIT,RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
+    public List<TOfflineTransDtl> getUncheckOfflineTransdtl(String transdate,String transtype) {
+        return transDtlDao.findAllByTransdateAndStatusAndTranstype(transdate,RestaurantConstant.STATUS_TRANSDTL_INIT,RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
     }
 }
