diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 6a1a4cd..287dde0 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -28,5 +28,5 @@
 
 payapi.appid=200001
 
-cron.offlinedtl=0/30 * * * * ?
+cron.offlinedtl=0 0/5 * * * ?
 payapi.logintime=0 0/20 * * * ? 
\ No newline at end of file
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 35480c1..c5808eb 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
@@ -175,21 +175,14 @@
         tTransdtl.setBillno(systemUtilService.getRefno());
         tTransdtl.setShopid(tDevice.getShopid());
         tTransdtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
-
+        tTransdtl.setAmount(0d);
         tTransdtl.setCusttype(customer.getCusttype());
         tTransdtl.setTransdate(req.getTermdate());
 
-        Double amount=req.getAmount() / 100.0;
 
-        DiscountBean bean=deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(),req.getTermtime(), customer.getCustid());
-        if(null!=bean){
-            tTransdtl.setRuleid(bean.getRuleid());
-            amount = getDiscountAmount(req.getTermdate(), customer.getCustid(), amount, bean);
-        }
-        tTransdtl.setAmount(amount);
         tTransdtl.setManagefee(managefee);
         tTransdtl.setTranstime(req.getTermtime());
-        tTransdtl.setCardno(req.getCardno());
+        tTransdtl.setCardno("25002885");
         tTransdtl.setTransmode(req.getTranstype());
 
         tTransdtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_ONLINE);
@@ -277,7 +270,14 @@
             resp.setRetmsg("客户" + tTransdtl.getCustid() + "不存在");
             return resp;
         }
+        Double amount=req.getAmount() / 100.0;
 
+        DiscountBean bean=deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(),req.getTermtime(), cus.getCustid());
+        if(null!=bean){
+            tTransdtl.setRuleid(bean.getRuleid());
+            amount = getDiscountAmount(req.getTermdate(), cus.getCustid(), amount, bean);
+        }
+        tTransdtl.setAmount(amount);
         tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
         TTransDtl dtl=transDtlService.saveTransdtl(tTransdtl);
 
@@ -390,16 +390,17 @@
     @Override
     public PosPayReverseResp doPayCancel(PosPayReverseReq req) {
         PosPayReverseResp resp = new PosPayReverseResp();
+        System.out.println("termsqlno:"+req.getTermseqno());
         TTransDtl tTransDtl = transDtlService.getTransDtlByBillno(req.getReversalbillno());
         if (null == tTransDtl) {
-            resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
+            resp.setRetcode(ErrorCode.ERRIF_OK);
             resp.setRetmsg("交易参考号" + req.getReversalbillno() + "不存在");
             return resp;
         }
         if (!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.toUpperCase().equals(tTransDtl.getStatus().toUpperCase())) {
            /* tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
             tTransDtl.setAttr1("交易状态未成功");*/
-            resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
+            resp.setRetcode(ErrorCode.ERRIF_OK);
             resp.setRetmsg("流水" + req.getReversalbillno() + "交易状态未成功，不能冲正");
             return resp;
         }
@@ -411,10 +412,17 @@
         }
         try {
             tTransDtl.setTermsqlno(req.getTermseqno());
-            transDtlService.revertTransdtl(tTransDtl);
-            resp.setTermseqno(req.getTermseqno());
-            resp.setRetmsg("冲正成功");
-            resp.setRetcode(ErrorCode.ERRIF_OK);
+            TTransDtl revdtl=transDtlService.doRevertTransdtl(tTransDtl);
+            if(!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(revdtl.getStatus())){
+                resp.setTermseqno(req.getTermseqno());
+                resp.setRetmsg("冲正失败，"+revdtl.getAttr1());
+                resp.setRetcode(ErrorCode.ERRIF_OK);
+            }else{
+                resp.setTermseqno(req.getTermseqno());
+                resp.setRetmsg("冲正成功");
+                resp.setRetcode(ErrorCode.ERRIF_OK);
+            }
+
             return resp;
         } catch (Exception e) {
             e.printStackTrace();
@@ -637,7 +645,7 @@
         if (null == device) {
             err+="设备物理ID不存在;";
             transDtl.setAttr1(err);
-            offlineTransDtlService.saveTransdtl(transDtl);
+            offlineTransDtlService.saveOfflineTransdtl(transDtl);
             resp.setRetmsg("保存成功");
             resp.setRetcode(ErrorCode.ERRIF_OK);
             return resp;
@@ -739,7 +747,7 @@
             transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
         }
         transDtl.setAttr1(err);
-        offlineTransDtlService.saveTransdtl(transDtl);
+        offlineTransDtlService.saveOfflineTransdtl(transDtl);
 
         resp.setRetcode(ErrorCode.ERRIF_OK);
         resp.setRetmsg("保存成功");
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 3cb42e0..0f15938 100644
--- a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
+++ b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
@@ -63,7 +63,6 @@
                 tTransDtl.setManagefee(dtl.getManagefee());
 
 
-
                 CitizenCardPayinitParam param=new CitizenCardPayinitParam();
                 param.setBillno(dtl.getBillno());
                 param.setShopaccno(dtl.getShopid());
@@ -75,9 +74,7 @@
                 param.setAmount(amt.intValue());
                 CitizenPayResponse response=citizenCardPayProxy.citizencardPayinit(param);
                 if(response.getRetcode()!=0){
-                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                    dtl.setAttr1(response.getRetmsg()+","+ response.getException());
-                    offlineTransDtlService.saveTransdtl(dtl);
+                    saveTransdtls(dtl, tTransDtl, response);
                     logger.info(dtl.getBillno()+"初始化失败,"+response.getRetcode()+","+response.getRetmsg()+","+ response.getException());
                     continue;
                 }
@@ -85,18 +82,28 @@
                 finishparam.setRefno(response.getRefno());
                 CitizenPayResponse finishresp=citizenCardPayProxy.citizencardPayFinish(finishparam);
                 if(finishresp.getRetcode()!=0){
-                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                    dtl.setAttr1(response.getRetmsg()+","+ response.getException());
-                    offlineTransDtlService.saveTransdtl(dtl);
+                    saveTransdtls(dtl, tTransDtl, finishresp);
                     logger.info(dtl.getBillno()+"消费缺认失败,"+finishresp.getRetcode()+","+finishresp.getRetmsg()+","+ finishresp.getException());
                     continue;
                 }
+                tTransDtl.setAccdate(date);
+                tTransDtl.setAcctime(DateUtil.getNow("HHmmss"));
                 dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
-                offlineTransDtlService.saveTransdtl(dtl);
+                offlineTransDtlService.saveOfflineTransdtl(dtl);
+                transDtlService.saveTransdtl(tTransDtl);
             }
 
         }
 
     }
 
+    private void saveTransdtls(TOfflineTransDtl dtl, TTransDtl tTransDtl, CitizenPayResponse finishresp) {
+        dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+        dtl.setAttr1(finishresp.getRetmsg() + "," + finishresp.getException());
+        tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+        tTransDtl.setAttr1(finishresp.getRetmsg() + "," + finishresp.getException());
+        offlineTransDtlService.saveOfflineTransdtl(dtl);
+        transDtlService.saveTransdtl(tTransDtl);
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
index 7d4ff29..e21492d 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
@@ -58,7 +58,7 @@
                                              @RequestParam("limit") Integer pageSize,
                                              @RequestParam(value = "custname", required = false) String custname,
                                              @RequestParam(value = "accdate", required = false) String accdate,
-                                             @RequestParam(value = "refno", required = false) String refno) {
+                                             @RequestParam(value = "billno", required = false) String billno) {
         try {
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
             if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
@@ -70,7 +70,7 @@
 
             }
             bean.setCustname(custname);
-            bean.setBillno(refno);
+            bean.setBillno(billno);
             bean.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
             bean.setPageNo(pageNo);
             bean.setPageSize(pageSize);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
index c8fd88e..3fd6627 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
@@ -22,5 +22,5 @@
     @Query(value = "from TOfflineTransDtl where termsqlno=?1 and termid=?2 and accdate=?3 ")
     List<TOfflineTransDtl> findByTermsqlnoAndTermidAndAccdate(Integer termsqlno,Integer termid,String accdate);
 
-    List<TOfflineTransDtl> findAllByAccdateAndStatus(String accdate,String status);
+    List<TOfflineTransDtl> findAllByTransdateAndStatusAndTranstype(String transdate,String status,String transtype);
 }
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 e151699..74f128a 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
@@ -14,7 +14,7 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    TOfflineTransDtl saveTransdtl(TOfflineTransDtl dtl);
+    TOfflineTransDtl saveOfflineTransdtl(TOfflineTransDtl dtl);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     TOfflineTransDtl getTransDtlByBillno(String billno);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
index 209d4d4..e8f6fde 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
@@ -34,6 +34,9 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult revertTransdtl(TTransDtl dtl);
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+    TTransDtl doRevertTransdtl(TTransDtl dtl);
+
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     Integer getMaxSeqnoToday(Integer deviceid,String accdate);
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 e9dfdfb..8c5ea23 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
@@ -51,7 +51,7 @@
 
 
     @Override
-    public TOfflineTransDtl saveTransdtl(TOfflineTransDtl dtl) {
+    public TOfflineTransDtl saveOfflineTransdtl(TOfflineTransDtl dtl) {
         return transDtlDao.save(dtl);
     }
 
@@ -113,6 +113,6 @@
 
     @Override
     public List<TOfflineTransDtl> getUncheckOfflineTransdtl(String accdate) {
-        return transDtlDao.findAllByAccdateAndStatus(accdate,"init");
+        return transDtlDao.findAllByTransdateAndStatusAndTranstype(accdate,RestaurantConstant.STATUS_TRANSDTL_INIT,RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
index 935a6b0..b86ea5c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
@@ -164,22 +164,34 @@
 
     @Override
     public JsonResult revertTransdtl(TTransDtl dtl) {
-        TTransDtl targetDtl=null;
-        Optional<TTransDtl> odtl=transDtlDao.findById(dtl.getBillno());
-        if(odtl.isPresent()){
-            targetDtl=odtl.get();
+        TTransDtl revdtl=doRevertTransdtl(dtl);
+        if(null==revdtl){
+            return JsonResult.error("撤销流水未查询到");
         }
-        if(null==targetDtl){
-            return JsonResult.error("未查询到目标流水");
+        if (!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(revdtl.getStatus())){
+            return JsonResult.error("冲正失败，"+revdtl.getAttr1());
         }
+        return JsonResult.ok("操作成功");
+    }
 
+    @Override
+    public TTransDtl doRevertTransdtl(TTransDtl dtl) {
+        TTransDtl targetDtl;
+        Optional<TTransDtl> odtl=transDtlDao.findById(dtl.getBillno());
+        if(!odtl.isPresent()){
+            targetDtl=new TTransDtl();
+            targetDtl.setBillno(systemUtilService.getRefno());
+            targetDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+            targetDtl.setAttr1("未查询到目标流水");
+            transDtlDao.save(targetDtl);
+            return targetDtl;
+        }
+        targetDtl=odtl.get();
         TTransDtl revDtl=new TTransDtl();
         revDtl.setBillno(systemUtilService.getRefno());
         revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
         String date=DateUtil.getNow("yyyyMMdd");
         String time=DateUtil.getNow("HHmmss");
-        revDtl.setAccdate(date);
-        revDtl.setAcctime(time);
         revDtl.setTransdate(date);
         revDtl.setTranstime(time);
         revDtl.setRevbillno(targetDtl.getBillno());
@@ -192,30 +204,34 @@
         revDtl.setManagefee(targetDtl.getManagefee());
         revDtl.setRuleid(targetDtl.getRuleid());
         revDtl.setCustid(targetDtl.getCustid());
+        revDtl.setCardno(targetDtl.getCardno());
         revDtl.setCustname(targetDtl.getCustname());
         revDtl.setCusttype(targetDtl.getCusttype());
         revDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_REVERT);
         revDtl.setAmount(targetDtl.getAmount()*-1.00);
-        transDtlDao.save(revDtl);
+      //  revDtl=transDtlDao.save(revDtl);
         ConsumePayCancelParam cancelParam=new ConsumePayCancelParam();
-        cancelParam.setBillno(revDtl.getBillno());
+      //  cancelParam.setBillno(revDtl.getBillno());
         cancelParam.setRefno(targetDtl.getRefno());
-        cancelParam.setRequestbillno(targetDtl.getBillno());
-        cancelParam.setShopaccno(targetDtl.getShopid());
-        cancelParam.setTransdate(targetDtl.getTransdate());
-        cancelParam.setTranstime(targetDtl.getTranstime());
+        cancelParam.setRequestbillno(revDtl.getBillno());
+       // cancelParam.setShopaccno(revDtl.getShopid());
+        cancelParam.setTransdate(revDtl.getTransdate());
+        cancelParam.setTranstime(revDtl.getTranstime());
         PayReverseResponse reverseResp=transactionProxy.payCancel(cancelParam);
+        revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
         if(reverseResp.getRetcode()!=0){
             revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-
-
+            revDtl.setAttr1(reverseResp.getRetmsg()+","+reverseResp.getException());
+            transDtlDao.save(revDtl);
+            return revDtl;
         }
-        revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+        revDtl.setAcctime(DateUtil.getNow("HHmmss"));
+        revDtl.setAccdate(date);
         revDtl.setRefno(reverseResp.getRefno());
         transDtlDao.save(revDtl);
         targetDtl.setRevflag(1);
         transDtlDao.save(targetDtl);
-        return JsonResult.ok("操作成功");
+        return revDtl;
     }
 
     @Override
diff --git a/src/main/resources/templates/restaurant/transdtl/index.html b/src/main/resources/templates/restaurant/transdtl/index.html
index eada656..9fb62b3 100644
--- a/src/main/resources/templates/restaurant/transdtl/index.html
+++ b/src/main/resources/templates/restaurant/transdtl/index.html
@@ -50,6 +50,7 @@
                         <label class="layui-form-label"> 商户：</label>
                         <div class="layui-input-inline">
                             <select name="shopid" id="transdtl-shopid">
+                                <option value="" selected>全部</option>
                                 <option th:each="shop : ${shoplistForSelect}" th:value="${shop.shopid}">[[${shop.shopname}]]</option>
                             </select>
                         </div>
@@ -63,7 +64,7 @@
                         <div class="layui-input-inline">
                             <select name="status" id="transdtl-status">
                                 <option value="" selected>全部</option>
-                                <option value="normal">成功</option>
+                                <option value="success">成功</option>
                                 <option value="fail">失败</option>
                                 <option value="init">初始化</option>
                                 <option value="wip">等待</option>
@@ -133,7 +134,7 @@
                     {field: 'custname', title: '姓名',width:100, fixed: 'left'},
                     {field: 'cardno', title: '市民卡号',width:100, fixed: 'left'},
                     {field: 'billno', title: '交易号', fixed: 'left',width:200, sort: true},
-                    {field: 'amount', title: '交易金额', sort: true,
+                    {field: 'amount', title: '交易金额',width:100, sort: true,
                         templet: function (item) {
                             return numberFormat(item.amount,2);
                         }},
@@ -196,6 +197,9 @@
                         width:100,
                         align: 'center',
                         templet: function (item) {
+                            if(shoplist[item.shopid]==undefined||shoplist[item.shopid]==null){
+                                return '';
+                            }
                             return shoplist[item.shopid];
                         }
                     },
diff --git a/src/main/resources/templates/restaurant/transdtlrev/form.html b/src/main/resources/templates/restaurant/transdtlrev/form.html
index 23a5594..65c68c8 100644
--- a/src/main/resources/templates/restaurant/transdtlrev/form.html
+++ b/src/main/resources/templates/restaurant/transdtlrev/form.html
@@ -1,6 +1,6 @@
 
 <form id="transdtlrev-form" lay-filter="form" class="layui-form model-form">
-    <input name="refno" id="refno" type="hidden"/>
+    <input name="billno" id="billno" type="hidden"/>
     <div class="layui-form-item">
         <label class="layui-form-label">冲正对象</label>
         <div class="layui-input-block">
@@ -41,7 +41,7 @@
         var dtl = admin.getTempData('t_dtl');
         console.log(dtl)
         if (dtl) {
-            $('input[name="refno"]').attr('readonly', 'readonly');
+            $('input[name="billno"]').attr('readonly', 'readonly');
             form.val('form', dtl);
         }
         // 表单提交事件
diff --git a/src/main/resources/templates/restaurant/transdtlrev/index.html b/src/main/resources/templates/restaurant/transdtlrev/index.html
index 564d973..b049ad8 100644
--- a/src/main/resources/templates/restaurant/transdtlrev/index.html
+++ b/src/main/resources/templates/restaurant/transdtlrev/index.html
@@ -18,7 +18,7 @@
                 <div class="layui-inline">
                     <label class="layui-form-label"> 交易号：</label>
                     <div class="layui-input-inline">
-                        <input id="transdtlrev-refno" name="refno" class="layui-input " type="text"/>
+                        <input id="transdtlrev-billno" name="billno" class="layui-input " type="text"/>
                     </div>
                 </div>
                 <div class="layui-inline">
@@ -124,7 +124,7 @@
                     },
                     {
                     field: 'refno', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
-                        if(item.transtype!='cz'){
+                        if(item.transtype!='revert'){
                             return ' <a class="layui-btn  layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>冲正</a> ';
                         }
                         return '';
@@ -158,13 +158,13 @@
         // 搜索按钮点击事件
         $('#transdtlrev-btn-search').click(function () {
             let custname = $('#transdtlrev-custname').val().trim();
-            let refno = $('#transdtlrev-refno').val().trim();
+            let billno = $('#transdtlrev-billno').val().trim();
             let accdate = $('#transdtlrev-accdate').val();
             table.reload('transdtlrev-table', {
                 where: {
                     custname: custname,
                     accdate: accdate,
-                    refno: refno,
+                    billno: billno,
                 }, page: {curr: 1}
             });
             //页面存在form需要返回false，否则layui自动刷新
