离线交易逻辑修改
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 2225061..65c3151 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -29,5 +29,5 @@
 
 payapi.appid=200001
 
-cron.offlinedtl=0 0/5 * * * ?
-payapi.logintime=0 0/20 * * * ? 
\ No newline at end of file
+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/bean/PosPayHeartBeatResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayHeartBeatResp.java
index a677346..9b140d1 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayHeartBeatResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayHeartBeatResp.java
@@ -3,9 +3,18 @@
 public class PosPayHeartBeatResp extends APIResp {
     private Integer paragroupid;
     private Integer paraverno;
+    private Integer whitelistid;
     private String cardverno;
     private String systime;
 
+    public Integer getWhitelistid() {
+        return whitelistid;
+    }
+
+    public void setWhitelistid(Integer whitelistid) {
+        this.whitelistid = whitelistid;
+    }
+
     public Integer getParagroupid() {
         return paragroupid;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayLoginResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayLoginResp.java
index 0c28aa5..cc5d2db 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayLoginResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayLoginResp.java
@@ -4,12 +4,21 @@
 public class PosPayLoginResp extends APIResp {
     private Integer paragroupid;
     private Integer paraverno;
+    private Integer whitelistid;
     private Integer onlineseqno;
     private Integer offlineseqno;
     private String cardverno;
     private String systime;
     private String shopname;
 
+    public Integer getWhitelistid() {
+        return whitelistid;
+    }
+
+    public void setWhitelistid(Integer whitelistid) {
+        this.whitelistid = whitelistid;
+    }
+
     public String getShopname() {
         return shopname;
     }
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 6abecf8..9e73c0e 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
@@ -26,6 +26,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -66,20 +67,19 @@
     private ConsumePropxy consumePropxy;
 
 
-
     @Override
     public PosPayLoginResp doLogin(PosPayLoginReq req) {
         PosPayLoginResp resp = new PosPayLoginResp();
         String sysdt = DateUtil.getNow();
 
         TDevice tDevice = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (tDevice == null) {
-            resp.setRetcode(ErrorCode.ERRIF_POS_NOREG);
-            resp.setRetmsg("设备未注册");
+        APIResp apiResp = checkDevice(resp, tDevice);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
             return resp;
         }
-
-        List<TShopSettlement> shoplist=shopSettlementService.getShopByShopid(tDevice.getShopid());
+        List<TShopSettlement> shoplist = shopSettlementService.getShopByShopid(tDevice.getShopid());
         if (shoplist.size() < 1) {
             resp.setRetcode(ErrorCode.ERRIF_POS_NOSHOP);
             resp.setRetmsg("设备未绑定商户");
@@ -91,19 +91,19 @@
        /* if (groupid == 0) {
             groupid = 1;
         }*/
-        TDevparaGroup group=null;
+        TDevparaGroup group = null;
         TDevparaBind bind = deviceParamService.getDevparaBindByDeviceid(tDevice.getId());
         if (null == bind) {
-            group=deviceParamService.getDefaultDevparaGroup();
-        }else{
-            group=deviceParamService.getDevparaGroupByGroupid(groupid);
+            group = deviceParamService.getDefaultDevparaGroup();
+        } else {
+            group = deviceParamService.getDevparaGroupByGroupid(bind.getGroupid());
         }
 
 
         tDevice.setRunstatus(1);
         tDevice.setLastlogintime(sysdt);
         deviceService.saveDevice(tDevice);
-        if(group.getGlobalflag()==false){
+        if (group.getGlobalflag() == false) {
             if (null == bind) {
                 bind = new TDevparaBind();
                 bind.setDeviceid(tDevice.getId());
@@ -112,6 +112,10 @@
             bind.setLastsaved(sysdt);
             devparaBindDao.save(bind);
         }
+        TWhitelistDevbind whitelistbind = whitelistService.getWhitelistDevbindByDeviceId(tDevice.getId());
+        if (null != whitelistbind) {
+            resp.setWhitelistid(whitelistbind.getWhitelistid());
+        }
         Integer onlineseqno = transDtlService.getMaxSeqnoToday(tDevice.getId(), req.getTermdate());
         resp.setCardverno(req.getCardverno());
         resp.setOnlineseqno(onlineseqno + 1);
@@ -130,57 +134,76 @@
         PosPayInitResp resp = new PosPayInitResp();
 
         TDevice tDevice = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (tDevice == null) {
-            resp.setRetcode(ErrorCode.ERRIF_POS_NOREG);
-            resp.setRetmsg("设备不存在");
+        APIResp apiResp = checkDevice(resp, tDevice);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
             return resp;
         }
-        TCard tCard = cardService.getCardByCardnoAndCardphyid(req.getCardno(), req.getCardphyid());
+        String cardno;
+        String cardphyid;
+
+        if (RestaurantConstant.TRANSMODE_CODE.equals(req.getTranstype())) {
+            DoorQRCodeParam qrparam = new DoorQRCodeParam();
+            qrparam.setQrcode(req.getQrcode());
+            DoorQrcodeResponse qrcoderesp = consumePropxy.qrcodequery(qrparam);
+            if (qrcoderesp.getRetcode() == 0) {
+                cardno = qrcoderesp.getCitycardno();
+                cardphyid = qrcoderesp.getCardphyid();
+            } else {
+                resp.setRetcode(qrcoderesp.getRetcode().toString());
+                resp.setRetmsg(qrcoderesp.getRetmsg());
+                return resp;
+            }
+        } else {
+            cardno = req.getCardno();
+            cardphyid = req.getCardphyid();
+        }
+
+        TCard tCard = cardService.getCardByCardnoAndCardphyid(cardno, cardphyid);
         if (null == tCard) {
             resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
             resp.setRetmsg("卡号[" + req.getCardno() + "]不存在");
             return resp;
         }
-        if (!RestaurantConstant.STATUS_CARD_NORMAL.equals(tCard.getStatus())){
+        if (!RestaurantConstant.STATUS_CARD_NORMAL.equals(tCard.getStatus())) {
             resp.setRetcode(ErrorCode.ERRIF_CARD_DISABLED);
             resp.setRetmsg("卡号[" + req.getCardno() + "]已注销");
             return resp;
         }
-        if(!RestaurantConstant.STATUS_CARD_NORMAL.equals(tCard.getTransstatus())){
+        if (!RestaurantConstant.STATUS_CARD_NORMAL.equals(tCard.getTransstatus())) {
             resp.setRetmsg("卡号[" + req.getCardno() + "]状态异常;");
             resp.setRetcode(ErrorCode.ERRIF_CARD_DISABLED);
             return resp;
         }
-        TCustomer customer=customerService.getCustomerByCustid(tCard.getCustid());
-        if(null==customer){
+        TCustomer customer = customerService.getCustomerByCustid(tCard.getCustid());
+        if (null == customer) {
             resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
             resp.setRetmsg("卡对应客户不存在");
             return resp;
         }
-        Double managefee=0.0;
+        Double managefee = 0.0;
 
-        TTransDtl odtl=transDtlService.getPosTransdtl(tDevice.getId(),req.getTermseqno(),req.getTermdate());
+        TTransDtl odtl = transDtlService.getPosTransdtl(tDevice.getId(), req.getTermseqno(), req.getTermdate());
 
-        if(null!=odtl){
+        if (null != odtl) {
             resp.setRetcode(ErrorCode.ERRIF_POS_SEQNO_REPEAT);
             resp.setRetmsg("该pos当日流水重复");
             return resp;
         }
-
         TTransDtl tTransdtl = new TTransDtl();
-        tTransdtl.setAccdate(systemUtilService.getAccdate());
+
+
         tTransdtl.setTermid(tDevice.getId());
         tTransdtl.setBillno(systemUtilService.getRefno());
         tTransdtl.setShopid(tDevice.getShopid());
-        tTransdtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
         tTransdtl.setAmount(0d);
         tTransdtl.setCusttype(customer.getCusttype());
         tTransdtl.setTransdate(req.getTermdate());
 
-
         tTransdtl.setManagefee(managefee);
         tTransdtl.setTranstime(req.getTermtime());
-        tTransdtl.setCardno(req.getCardno());
+        tTransdtl.setCardno(tCard.getCardno());
         tTransdtl.setTransmode(req.getTranstype());
 
         tTransdtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_ONLINE);
@@ -229,16 +252,17 @@
         return resp;
     }
 
-    private Double getDiscountAmount(String termdate, String custid,  Double amount, DiscountBean bean) {
-        Integer limit=transDtlService.getDiscountLimitToday(termdate,custid,bean.getRuleid());
-        if(bean.getLimitcnt()>=limit){
+    private Double getDiscountAmount(String termdate, String custid, Double amount, DiscountBean bean) {
+        Integer limit = transDtlService.getDiscountLimitToday(termdate, custid, bean.getRuleid());
+        if (bean.getLimitcnt() > limit) {
 
-            if(RestaurantConstant.RULETYPE_REDUCTION.equals(bean.getRuletype())){
-                amount=amount-Double.parseDouble(bean.getAmount());
-            }else if (RestaurantConstant.RULETYPE_DISCOUNT.equals(bean.getRuletype())){
-                amount=amount*(Double.parseDouble(bean.getAmount())/10);
-            }else if (RestaurantConstant.RULETYPE_QUOTA.equals(bean.getRuletype())){
-                amount=Double.parseDouble(bean.getAmount());
+            if (RestaurantConstant.RULETYPE_REDUCTION.equals(bean.getRuletype())) {
+                amount = amount - bean.getAmount();
+            } else if (RestaurantConstant.RULETYPE_DISCOUNT.equals(bean.getRuletype())) {
+                amount = amount * (bean.getAmount() / 10);
+            } else if (RestaurantConstant.RULETYPE_QUOTA.equals(bean.getRuletype())) {
+                BigDecimal amt = BigDecimal.valueOf(bean.getAmount());
+                amount = amt.doubleValue();
             }
         }
         return amount;
@@ -256,9 +280,10 @@
         }
 
         TDevice tDevice = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (tDevice == null) {
-            resp.setRetcode(ErrorCode.ERRIF_POS_NOREG);
-            resp.setRetmsg("设备不存在");
+        APIResp apiResp = checkDevice(resp, tDevice);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
             return resp;
         }
 
@@ -268,20 +293,21 @@
             resp.setRetmsg("客户" + tTransdtl.getCustid() + "不存在");
             return resp;
         }
-        Double amount=req.getAmount() / 100.0;
+        Double amount = req.getAmount() / 100.0;
 
-        DiscountBean bean=deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(),req.getTermtime(), cus.getCustid());
-        if(null!=bean){
+        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);
+        TTransDtl dtl = transDtlService.saveTransdtl(tTransdtl);
 
-        if(RestaurantConstant.TRANSMODE_CODE.equals(dtl.getTransmode())){
-            QrcodePayParam param=new QrcodePayParam();
-            param.setAmount(MoneyUtil.YuanToFen(tTransdtl.getAmount()));
+
+   /*     if(RestaurantConstant.TRANSMODE_CODE.equals(dtl.getTransmode())){
+            DoorQRCodeParam qrparam=new DoorQRCodeParam();
+            qrparam.setAmount(MoneyUtil.YuanToFen(tTransdtl.getAmount()));
             param.setBillno(tTransdtl.getBillno());
             param.setShopaccno(tTransdtl.getShopid());
             param.setTransdate(tTransdtl.getTransdate());
@@ -299,54 +325,55 @@
                 resp.setRetmsg(qrcoderesp.getRetmsg());
             }
 
-        }else{
-            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.setAmount(MoneyUtil.YuanToFen(dtl.getAmount()));
-            param.setDtltype("canteen");
-            CitizenPayResponse response=citizenCardPayProxy.citizencardPayinit(param);
-            if(response.getRetcode() == 0){
-                tTransdtl.setRefno(response.getRefno());
-                CitizenCardPayfinishParam confirmParam=new CitizenCardPayfinishParam();
-                confirmParam.setRefno(response.getRefno());
-                CitizenPayResponse confirmResp = citizenCardPayProxy.citizencardPayFinish(confirmParam);
-                if(confirmResp.getRetcode() == 0){
-                    tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
-                    resp.setRetcode(ErrorCode.ERRIF_OK);
-                }else if (confirmResp.getRetcode()==55555){
-                    tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
-                    resp.setRetcode(ErrorCode.ERRIF_OK);
-                }else{
-                    tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                    tTransdtl.setAttr1(confirmResp.getRetmsg()+","+confirmResp.getException());
-                    resp.setRetcode(confirmResp.getRetcode().toString());
-                    resp.setRetmsg(confirmResp.getRetmsg());
-                }
-            }else{
+        }else{*/
+        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.setAmount(MoneyUtil.YuanToFen(dtl.getAmount()));
+        param.setDtltype("canteen");
+        CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
+        if (response.getRetcode() == 0) {
+            tTransdtl.setRefno(response.getRefno());
+            CitizenCardPayfinishParam confirmParam = new CitizenCardPayfinishParam();
+            confirmParam.setRefno(response.getRefno());
+            CitizenPayResponse confirmResp = citizenCardPayProxy.citizencardPayFinish(confirmParam);
+            if (confirmResp.getRetcode() == 0) {
+                tTransdtl.setAccdate(systemUtilService.getAccdate());
+                tTransdtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
+                tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+                resp.setRetcode(ErrorCode.ERRIF_OK);
+            } else if (confirmResp.getRetcode() == 55555) {
+                tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
+                resp.setRetcode(ErrorCode.ERRIF_OK);
+            } else {
                 tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                tTransdtl.setAttr1(response.getRetmsg()+","+response.getException());
-                resp.setRetcode(response.getRetcode().toString());
-                resp.setRetmsg(response.getRetmsg());
+                tTransdtl.setAttr1(confirmResp.getRetmsg() + "," + confirmResp.getException());
+                resp.setRetcode(confirmResp.getRetcode().toString());
+                resp.setRetmsg(confirmResp.getRetmsg());
             }
+        } else {
+            tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+            tTransdtl.setAttr1(response.getRetmsg() + "," + response.getException());
+            resp.setRetcode(response.getRetcode().toString());
+            resp.setRetmsg(response.getRetmsg());
         }
-
+        // }
 
 
         resp.setBillno(req.getBillno());
-        Double retAmount=tTransdtl.getAmount()*100;
+        Double retAmount = tTransdtl.getAmount() * 100;
         resp.setAmount(retAmount.intValue());
         resp.setExtraamt(0);
         resp.setUserid(cus.getCustid());
         resp.setUsername(cus.getCustname());
         resp.setBalance(0);
         transDtlService.saveTransdtl(tTransdtl);
-        if(RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(tTransdtl.getStatus())){
+        if (RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(tTransdtl.getStatus())) {
             resp.setRequire_query(true);
-        }else{
+        } else {
             resp.setRequire_query(false);
         }
         return resp;
@@ -363,20 +390,20 @@
             return resp;
         }
 
-        QueryDtlResultParam param=new QueryDtlResultParam();
+        QueryDtlResultParam param = new QueryDtlResultParam();
         param.setRefno(tTransdtl.getRefno());
         param.setBillno(tTransdtl.getBillno());
         param.setShopaccno(tTransdtl.getShopid());
-        QueryTransDtlResponse queryresp=transactionProxy.queryDtlResult(param);
-        if(RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(queryresp.getStatus())){
+        QueryTransDtlResponse queryresp = transactionProxy.queryDtlResult(param);
+        if (RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(queryresp.getStatus())) {
             resp.setRequire_query(true);
-        }else{
+        } else {
             resp.setRequire_query(false);
         }
         resp.setBillno(tTransdtl.getBillno());
-        Double retAmount=tTransdtl.getAmount()*100;
+        Double retAmount = tTransdtl.getAmount() * 100;
         resp.setAmount(retAmount.intValue());
-        Double retExtamt=tTransdtl.getManagefee()*100;
+        Double retExtamt = tTransdtl.getManagefee() * 100;
         resp.setExtraamt(retExtamt.intValue());
         resp.setUserid(tTransdtl.getCustid());
         resp.setUsername(tTransdtl.getCustname());
@@ -388,7 +415,7 @@
     @Override
     public PosPayReverseResp doPayCancel(PosPayReverseReq req) {
         PosPayReverseResp resp = new PosPayReverseResp();
-        System.out.println("termsqlno:"+req.getTermseqno());
+        System.out.println("termsqlno:" + req.getTermseqno());
         TTransDtl tTransDtl = transDtlService.getTransDtlByBillno(req.getReversalbillno());
         if (null == tTransDtl) {
             resp.setRetcode(ErrorCode.ERRIF_OK);
@@ -410,12 +437,12 @@
         }
         try {
             tTransDtl.setTermsqlno(req.getTermseqno());
-            TTransDtl revdtl=transDtlService.doRevertTransdtl(tTransDtl);
-            if(!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(revdtl.getStatus())){
+            TTransDtl revdtl = transDtlService.doRevertTransdtl(tTransDtl);
+            if (!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(revdtl.getStatus())) {
                 resp.setTermseqno(req.getTermseqno());
-                resp.setRetmsg("冲正失败,"+revdtl.getAttr1());
+                resp.setRetmsg("冲正失败," + revdtl.getAttr1());
                 resp.setRetcode(ErrorCode.ERRIF_OK);
-            }else{
+            } else {
                 resp.setTermseqno(req.getTermseqno());
                 resp.setRetmsg("冲正成功");
                 resp.setRetcode(ErrorCode.ERRIF_OK);
@@ -461,23 +488,28 @@
     public PosPayWhitelistResp doGetWhitelist(PosPayWhitelistReq req) {
         PosPayWhitelistResp resp = new PosPayWhitelistResp();
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (checkDevice(resp, device)) return resp;
+        APIResp apiResp = checkDevice(resp, device);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
         device.setCardverno(req.getCardverno());
         deviceService.saveDevice(device);
         ArrayList<CardverBean> cardverFlags = new ArrayList<CardverBean>();
         String maxCardverno = cardService.getMaxCarcver();
         Integer count = req.getMaxcount();
-        List<TCardver> whitelistCards ;
-        TWhitelistDevbind bind=whitelistService.getWhitelistDevbindByDeviceId(device.getId());
-        TWhitelist whitelist=null;
-        if(null!=bind){
-            whitelist=whitelistService.getWhitelistById(bind.getWhitelistid());
+        List<TCardver> whitelistCards;
+        TWhitelistDevbind bind = whitelistService.getWhitelistDevbindByDeviceId(device.getId());
+        TWhitelist whitelist = null;
+        if (null != bind) {
+            whitelist = whitelistService.getWhitelistById(bind.getWhitelistid());
 
         }
-        if(null!=whitelist&&RestaurantConstant.STATUS_DISCOUNTRULE_NORMAL.equals(whitelist.getStatus())){
-            whitelistCards=whitelistService.getDevBindCardver(device.getId());
-        } else{
-            whitelistCards= cardService.getCardlistByTCardVer(req.getCardverno());
+        if (null != whitelist && RestaurantConstant.STATUS_DISCOUNTRULE_NORMAL.equals(whitelist.getStatus())) {
+            whitelistCards = whitelistService.getDevBindCardver(device.getId(), req.getCardverno());
+        } else {
+            whitelistCards = cardService.getCardlistByTCardVer(req.getCardverno());
         }
 
         if (null == whitelistCards || whitelistCards.size() < 1) {
@@ -511,30 +543,36 @@
         return resp;
     }
 
-    private boolean checkDevice(APIResp resp, TDevice device) {
+    private APIResp checkDevice(APIResp resp, TDevice device) {
         if (null == device) {
             resp.setRetcode(ErrorCode.E_DB_QRY);
             resp.setRetmsg("设备物理ID不存在");
-            return true;
+            return resp;
         }
         if (device.getState() != 1) {
             resp.setRetcode(ErrorCode.ERRIF_OTHER);
             resp.setRetmsg("设备状态错误");
-            return true;
+            return resp;
         }
-        if(!RestaurantConstant.STATUS_CHECKSTATUS_NORMAL.equals(device.getCheckstatus())){
+        if (!RestaurantConstant.STATUS_CHECKSTATUS_NORMAL.equals(device.getCheckstatus())) {
             resp.setRetcode(ErrorCode.ERRIF_OTHER);
             resp.setRetmsg("设备审核未通过");
-            return true;
+            return resp;
         }
-        return false;
+        resp.setRetcode(ErrorCode.ERRIF_OK);
+        return resp;
     }
 
     @Override
     public PosPayHeartBeatResp posHeartBeat(PosPayHeartBeatReq req) {
         PosPayHeartBeatResp resp = new PosPayHeartBeatResp();
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (checkDevice(resp, device)) return resp;
+        APIResp apiResp = checkDevice(resp, device);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
         String datetime = DateUtil.getNow("yyyyMMddHHmmss");
 
         device.setCardverno(req.getCardverno());
@@ -549,6 +587,11 @@
             return resp;
         }
 
+        TWhitelistDevbind bind = whitelistService.getWhitelistDevbindByDeviceId(device.getId());
+        if (null != bind) {
+            resp.setWhitelistid(bind.getWhitelistid());
+        }
+
         resp.setRetcode(ErrorCode.ERRIF_OK);
         resp.setRetmsg("心跳成功");
         resp.setSystime(datetime);
@@ -561,12 +604,17 @@
 
     @Override
     public PosPayQuerysalesResp posQuerySales(PosPaySysparaReq req) {
-        PosPayQuerysalesResp resp=new PosPayQuerysalesResp();
+        PosPayQuerysalesResp resp = new PosPayQuerysalesResp();
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (checkDevice(resp, device)) return resp;
+        APIResp 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());
+        SalesAmtBean salesAmtBean = transDtlService.getSalesToday(req.getTermdate(), device.getId());
+        ManageFeeAmtBean feeAmtBean = transDtlService.getManageFeeToday(req.getTermdate(), device.getId());
 
 
         resp.setRetcode(ErrorCode.ERRIF_OK);
@@ -581,21 +629,26 @@
 
     @Override
     public PosPayAccqueryResp AccountQuery(PosPayAccqueryReq req) {
-        PosPayAccqueryResp resp=new PosPayAccqueryResp();
+        PosPayAccqueryResp resp = new PosPayAccqueryResp();
 
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (checkDevice(resp, device)) return resp;
+        APIResp apiResp = checkDevice(resp, device);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
 
-        TCard card=cardService.getCardByCardnoAndCardphyid(req.getCardno(),req.getCardphyid());
+        TCard card = cardService.getCardByCardnoAndCardphyid(req.getCardno(), req.getCardphyid());
 
-        if(null==card){
+        if (null == card) {
             resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
             resp.setRetmsg("卡不存在");
             return resp;
         }
 
-        TCustomer customer=customerService.getCustomerByCustid(card.getCustid());
-        if(null==customer){
+        TCustomer customer = customerService.getCustomerByCustid(card.getCustid());
+        if (null == customer) {
             resp.setRetcode(ErrorCode.ERRIF_CARD_PWD);
             resp.setRetmsg("未查询到卡对应客户");
             return resp;
@@ -616,8 +669,8 @@
 
     @Override
     public PosPayOfflineDtlResp saveOfflineDtl(PosPayOfflineDtlReq req) {
-        PosPayOfflineDtlResp resp=new PosPayOfflineDtlResp();
-        TOfflineTransDtl transDtl=new TOfflineTransDtl();
+        PosPayOfflineDtlResp resp = new PosPayOfflineDtlResp();
+        TOfflineTransDtl transDtl = new TOfflineTransDtl();
         transDtl.setTransdate(req.getTransdate());
         transDtl.setTranstime(req.getTranstime());
 
@@ -627,29 +680,57 @@
 
         List<TMealtype> mealtypes = mealTypeDao.findAllByOrderByEndtime();
         transDtl.setTermsqlno(req.getTermseqno());
-        String err="";
+        String err = "";
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
         if (null == device) {
-            err+="设备物理ID不存在;";
+            err += "设备物理ID不存在;";
+        }
+        if (1 != device.getState()) {
+            err += "设备状态错误;";
+        }
+        if (!RestaurantConstant.STATUS_CHECKSTATUS_NORMAL.equals(device.getCheckstatus())) {
+            err += "设备审核未通过;";
+        }
+        if (!"".equals(err)) {
             transDtl.setAttr1(err);
             offlineTransDtlService.saveOfflineTransdtl(transDtl);
             resp.setRetmsg("保存成功");
             resp.setRetcode(ErrorCode.ERRIF_OK);
             return resp;
         }
-        Double amount=req.getAmount()/100.0;
-        TCard tCard = cardService.getCardByCardnoAndCardphyid(req.getCardno(), req.getCardphyid());
+        Double amount = req.getAmount() / 100.0;
+
+        String cardno;
+        String cardphyid;
+
+        if (RestaurantConstant.TRANSMODE_CODE.equals(req.getTranstype())) {
+            DoorQRCodeParam qrparam = new DoorQRCodeParam();
+            qrparam.setQrcode(req.getQrcode());
+            DoorQrcodeResponse qrcoderesp = consumePropxy.qrcodequery(qrparam);
+            if (qrcoderesp.getRetcode() == 0) {
+                cardno = qrcoderesp.getCitycardno();
+                cardphyid = qrcoderesp.getCardphyid();
+            } else {
+                cardno="";
+                cardphyid="";
+            }
+        } else {
+            cardno = req.getCardno();
+            cardphyid = req.getCardphyid();
+        }
+
+        TCard tCard = cardService.getCardByCardnoAndCardphyid(cardno, cardphyid);
         if (null == tCard) {
-            err+="卡号[" + req.getCardno() + "]不存在;";
-        }else{
-            TCustomer customer=customerService.getCustomerByCustid(tCard.getCustid());
-            if(null==customer){
-                err+="卡对应人员不存在;";
+            err += "卡号[" + req.getCardno() + "]不存在;";
+        } else {
+            TCustomer customer = customerService.getCustomerByCustid(tCard.getCustid());
+            if (null == customer) {
+                err += "卡对应人员不存在;";
             } else {
                 transDtl.setCustid(customer.getCustid());
                 transDtl.setCustname(customer.getCustname());
-                DiscountBean bean=deviceDiscountRuleService.getCustomerDiscount(device.getId(),req.getTranstime(), customer.getCustid());
-                if(null!=bean){
+                DiscountBean bean = deviceDiscountRuleService.getCustomerDiscount(device.getId(), req.getTranstime(), customer.getCustid());
+                if (null != bean) {
                     transDtl.setRuleid(bean.getRuleid());
                     amount = getDiscountAmount(req.getTransdate(), customer.getCustid(), amount, bean);
                 }
@@ -660,8 +741,8 @@
 
 
         if (device.getState() != 1) {
-            err+="设备状态错误;";
-        }else{
+            err += "设备状态错误;";
+        } else {
             transDtl.setTermid(device.getId());
             transDtl.setShopid(device.getShopid());
         }
@@ -677,10 +758,9 @@
         }*/
 
 
-
-        if("true".equals(req.getReversalflag())){
+        if ("true".equals(req.getReversalflag())) {
             transDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_REVERT);
-        }else{
+        } else {
             transDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
         }
 
@@ -693,28 +773,24 @@
             }
         } catch (Exception e) {
             e.printStackTrace();
-            err+="设置分餐失败;";
+            err += "设置分餐失败;";
         }
 
-        if("true".equals(req.getReversalflag())){
+        if ("true".equals(req.getReversalflag())) {
             TOfflineTransDtl tTransDtl =
-                    offlineTransDtlService.getOfflineTransDtlByTermsqlnoAndTermid(req.getReversaltermseqno(),device.getId(),req.getTransdate());
+                    offlineTransDtlService.getOfflineTransDtlByTermsqlnoAndTermid(req.getReversaltermseqno(), device.getId(), req.getTransdate());
             if (null == tTransDtl) {
-                err+=("终端参考号" + req.getReversaltermseqno() + "不存在;");
-            }else{
+                err += ("终端参考号" + req.getReversaltermseqno() + "不存在;");
+            } else {
                 if (!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.toUpperCase().equals(tTransDtl.getStatus().toUpperCase())) {
-                    err+=("交易状态未成功;");
+                    err += ("交易状态未成功;");
                 }
                 if (tTransDtl.getRevflag() == 1) {
-                    err+=("流水" + req.getReversaltermseqno() + "已冲正");
+                    err += ("流水" + req.getReversaltermseqno() + "已冲正");
                 }
 
                 try {
-                    if(!"".equals(err)){
-                        transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                    }else{
-                        transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
-                    }
+                    transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
                     transDtl.setAttr1(err);
                     offlineTransDtlService.revertOfflineTransdtl(tTransDtl);
                     resp.setTermseqno(tTransDtl.getTermsqlno());
@@ -727,13 +803,9 @@
                 }
             }
         }
-
-        if(!"".equals(err)){
-            transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-        }else{
-            transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
-        }
+        transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
         transDtl.setAttr1(err);
+        transDtl.setTransmode(req.getTranstype());
         offlineTransDtlService.saveOfflineTransdtl(transDtl);
 
         resp.setRetcode(ErrorCode.ERRIF_OK);
@@ -744,12 +816,17 @@
 
     @Override
     public PosPayGolbalParamResp getBusinessParam(PosPayGolbalParamReq req) {
-        PosPayGolbalParamResp resp=new PosPayGolbalParamResp();
+        PosPayGolbalParamResp resp = new PosPayGolbalParamResp();
         TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
-        if (checkDevice(resp, device)) return resp;
-        TBusinesspara url=businessparaDao.findByParakey("upgrade_url");
-        TBusinesspara version=businessparaDao.findByParakey("upgrade_version");
-        if(null==url||null==version){
+        APIResp apiResp = checkDevice(resp, device);
+        if (!ErrorCode.ERRIF_OK.equals(apiResp.getRetcode())) {
+            resp.setRetcode(apiResp.getRetcode());
+            resp.setRetmsg(apiResp.getRetmsg());
+            return resp;
+        }
+        TBusinesspara url = businessparaDao.findByParakey("upgrade_url");
+        TBusinesspara version = businessparaDao.findByParakey("upgrade_version");
+        if (null == url || null == version) {
             resp.setRetcode(ErrorCode.E_EMPTY_PARAM);
             resp.setRetmsg("请求参数未配置");
             return resp;
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 37aaef4..62c301f 100644
--- a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
+++ b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
@@ -1,10 +1,10 @@
 package com.supwisdom.dlpay.api.task;
 
-import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam;
-import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam;
-import com.supwisdom.dlpay.api.bean.CitizenPayResponse;
+import com.supwisdom.dlpay.api.bean.*;
+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.dao.TransDtlDao;
 import com.supwisdom.dlpay.restaurant.domain.TOfflineTransDtl;
 import com.supwisdom.dlpay.restaurant.domain.TTransDtl;
@@ -36,8 +36,12 @@
     private OfflineTransDtlService offlineTransDtlService;
     @Autowired
     private CitizenCardPayProxy citizenCardPayProxy;
+    @Autowired
+    private SystemUtilService systemUtilService;
+    @Autowired
+    private TransactionProxy transactionProxy;
 
-    @Scheduled(cron = "${cron.offlinedtl}")
+    @Scheduled(cron = "0 0/1 * * * ?")
     private void submitOfflineDtlTask() {
         String date = DateUtil.getNow("yyyyMMdd");
         List<TOfflineTransDtl> dtls = offlineTransDtlService.getUncheckOfflineTransdtl(date, RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
@@ -47,8 +51,6 @@
 
                 TTransDtl tTransDtl = gettTransDtl(dtl);
 
-                tTransDtl.setTransmode(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
-
                 CitizenCardPayinitParam param = new CitizenCardPayinitParam();
                 param.setBillno(dtl.getBillno());
                 param.setShopaccno(dtl.getShopid());
@@ -58,9 +60,11 @@
                 param.setDtltype("canteen");
                 Double amt = dtl.getAmount() * 100;
                 param.setAmount(amt.intValue());
+                logger.info(dtl.getBillno() + "开始消费逻辑");
+
                 CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
                 if (response.getRetcode() != 0) {
-                    saveTransdtls(dtl, tTransDtl, response);
+                    saveFailTransdtls(dtl, tTransDtl, response);
                     logger.info(dtl.getBillno() + "初始化失败," + response.getRetcode() + "," + response.getRetmsg() + "," + response.getException());
                     continue;
                 }
@@ -68,12 +72,15 @@
                 finishparam.setRefno(response.getRefno());
                 CitizenPayResponse finishresp = citizenCardPayProxy.citizencardPayFinish(finishparam);
                 if (finishresp.getRetcode() != 0) {
-                    saveTransdtls(dtl, tTransDtl, finishresp);
-                    logger.info(dtl.getBillno() + "消费缺认失败," + finishresp.getRetcode() + "," + finishresp.getRetmsg() + "," + finishresp.getException());
+                    saveFailTransdtls(dtl, tTransDtl, finishresp);
+                    logger.info(dtl.getBillno() + "消费确认失败," + finishresp.getRetcode() + "," + finishresp.getRetmsg() + "," + finishresp.getException());
                     continue;
                 }
                 tTransDtl.setAccdate(date);
-                tTransDtl.setAcctime(DateUtil.getNow("HHmmss"));
+                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);
                 offlineTransDtlService.saveOfflineTransdtl(dtl);
                 transDtlService.saveTransdtl(tTransDtl);
@@ -92,13 +99,13 @@
 
     }
 
-    @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.setCustid(dtl.getCustid());
         tTransDtl.setBillno(dtl.getBillno());
         tTransDtl.setTermsqlno(dtl.getTermsqlno());
         tTransDtl.setMealtype(dtl.getMealtype());
@@ -106,6 +113,8 @@
         tTransDtl.setShopid(dtl.getShopid());
         tTransDtl.setTransdate(dtl.getTransdate());
         tTransDtl.setTranstime(dtl.getTranstime());
+        tTransDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
+
         tTransDtl.setCustname(dtl.getCustname());
         tTransDtl.setTermid(dtl.getTermid());
         tTransDtl.setRuleid(dtl.getRuleid());
@@ -113,14 +122,55 @@
         return 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());
+    private void saveFailTransdtls(TOfflineTransDtl dtl, TTransDtl 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.setAttr1(attr);
+        tTransDtl.setStatus(status);
+        tTransDtl.setAttr1(attr);
         offlineTransDtlService.saveOfflineTransdtl(dtl);
         transDtlService.saveTransdtl(tTransDtl);
     }
 
+
+    @Scheduled(cron = "0 0/10 * * * ?")
+    private void checkWipDtls() {
+        String date = DateUtil.getNow("yyyyMMdd");
+        List<TTransDtl> dtls = transDtlService.getSubmittingTransdtl(date);
+        logger.info("正在核对" + dtls.size() + "笔未上传流水");
+        if (dtls.size() > 0) {
+            for (TTransDtl dtl : dtls) {
+                QueryDtlResultParam param = new QueryDtlResultParam();
+                param.setShopaccno(dtl.getShopid());
+                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);
+                    transDtlService.saveTransdtl(dtl);
+                }else{
+                    dtl.setAttr1(resp.getRetmsg());
+                    dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+                    transDtlService.saveTransdtl(dtl);
+
+                }
+
+            }
+        }
+
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
index d124781..b8349ee 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
@@ -42,11 +42,11 @@
 
     //sql,xss过滤
     HttpServletRequest httpServletRequest = (HttpServletRequest) request;
-    logger.info("CrosXssFilter.......orignal url:{},ParameterMap:{}",httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
+    logger.error("CrosXssFilter.......orignal url:{},ParameterMap:{}",httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
     XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(
         httpServletRequest);
     chain.doFilter(xssHttpServletRequestWrapper, response);
-    logger.info("CrosXssFilter..........doFilter url:{},ParameterMap:{}",xssHttpServletRequestWrapper.getRequestURI(), new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
+    logger.error("CrosXssFilter..........doFilter url:{},ParameterMap:{}",xssHttpServletRequestWrapper.getRequestURI(), new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
   }
 
   @Override
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java
index 369acb4..2da979b 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java
@@ -1,18 +1,17 @@
 package com.supwisdom.dlpay.restaurant.bean;
 
-import com.supwisdom.dlpay.system.bean.PageBean;
 
 public class DiscountBean{
     private String ruletype;
     private Integer limitcnt;
-    private String amount;
+    private Double amount;
     private Integer ruleid;
 
     public DiscountBean(){
 
     }
 
-    public DiscountBean(String ruletype, Integer limitcnt, String amount, Integer ruleid) {
+    public DiscountBean(String ruletype, Integer limitcnt, Double amount, Integer ruleid) {
         this.ruletype = ruletype;
         this.limitcnt = limitcnt;
         this.amount = amount;
@@ -43,11 +42,11 @@
         this.limitcnt = limitcnt;
     }
 
-    public String getAmount() {
+    public Double getAmount() {
         return amount;
     }
 
-    public void setAmount(String amount) {
+    public void setAmount(Double amount) {
         this.amount = amount;
     }
 }
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 007d190..032fedf 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceController.java
@@ -74,7 +74,7 @@
     public JsonResult add(@RequestBody TDevice device) {
         if (device != null) {
 
-            device.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_NORMAL);
+            device.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_UNCHECK);
             return deviceService.saveDevice(device);
         } else {
             return JsonResult.error("添加失败");
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
index 7003cb4..fca1b27 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
@@ -178,7 +178,7 @@
         try {
             String[] title = {"市民卡号", "姓名"}; //表头
             String[][] infos = {{"19045632", "张三"}}; // 示例内容
-            ExportExcel.queryexcel("导入名单模板", title, infos, request, response);
+            ExportExcel.queryexcel("餐补导入名单模板", title, infos, request, response);
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/WhitelistController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/WhitelistController.java
index 7325df8..4b618cb 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/WhitelistController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/WhitelistController.java
@@ -355,4 +355,16 @@
         }
     }
 
+
+    @GetMapping("/whitelist/downloadexcel")
+    @ResponseBody
+    public void downloadWhitelistExcel(HttpServletRequest request, HttpServletResponse response) {
+        try {
+            String[] title = {"市民卡号", "姓名"}; //表头
+            String[][] infos = {{"19045632", "张三"}}; // 示例内容
+            ExportExcel.queryexcel("白名单导入模板", title, infos, request, response);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
index cfb0ade..ee4f01f 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
@@ -40,7 +40,7 @@
     @Query(value = "select max(termsqlno) from tb_transdtl where termid=?1 and accdate=?2 ", nativeQuery=true)
     Integer getMaxSqlnoToday(Integer deviceid,String accdate);
 
-    List<TTransDtl> findAllByStatus(String status);
+    List<TTransDtl> findAllByStatusAndTransdate(String status,String date);
 
     TTransDtl getByTransdateAndTermidAndTermsqlno(String transdate,Integer termid,Integer termsqlno);
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDevbindDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDevbindDao.java
index e695e5f..2324728 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDevbindDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/WhitelistDevbindDao.java
@@ -6,6 +6,8 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface WhitelistDevbindDao extends JpaRepository<TWhitelistDevbind, String> {
 
@@ -21,5 +23,5 @@
   TWhitelistDevbind getWhitelistDevbindById(String id);
 
   @Query("from TWhitelistDevbind where deviceid=?1")
-  TWhitelistDevbind findByDeviceid(Integer deviceid);
+  List<TWhitelistDevbind> findByDeviceid(Integer deviceid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TOfflineTransDtl.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TOfflineTransDtl.java
index b577d52..6b4408a 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TOfflineTransDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TOfflineTransDtl.java
@@ -30,7 +30,8 @@
     private String mealtype;
     private Integer termsqlno;
     private Integer ruleid;
-
+    private String transmode;
+    private String qrcode;
 
 
     @Id
@@ -162,7 +163,7 @@
     }
 
 
-    @Column(name = "attr1",  length = 200)
+    @Column(name = "attr1",  length = 1000)
     public String getAttr1() {
         return attr1;
     }
@@ -228,4 +229,14 @@
     public void setRuleid(Integer ruleid) {
         this.ruleid = ruleid;
     }
+
+    @Column(name = "transmode",   precision = 10)
+    public String getTransmode() {
+        return transmode;
+    }
+
+    public void setTransmode(String transmode) {
+        this.transmode = transmode;
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
index b44b02e..b14dc93 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TTransDtl.java
@@ -170,7 +170,7 @@
   }
 
 
-  @Column(name = "attr1", length = 200)
+  @Column(name = "attr1", length = 1000)
   public String getAttr1() {
     return attr1;
   }
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 e8f6fde..cb9be96 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
@@ -49,7 +49,7 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
-    List<TTransDtl> getSubmittingTransdtl();
+    List<TTransDtl> getSubmittingTransdtl(String date);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     Integer getDiscountLimitToday(String termdate,String custid,Integer ruleid);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/WhitelistService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/WhitelistService.java
index 55aff30..c8cd0a0 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/WhitelistService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/WhitelistService.java
@@ -64,6 +64,6 @@
     TWhitelist getWhitelistById(Integer whitelistid);
 
     @Transactional(rollbackFor = Exception.class,readOnly = true)
-    List<TCardver>  getDevBindCardver(Integer deviceid) ;
+    List<TCardver>  getDevBindCardver(Integer deviceid,String cardverno) ;
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
index c85ca25..8687c15 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustomerServiceImpl.java
@@ -46,7 +46,7 @@
 
     @Override
     public PageResult<CustomerShowBean> getCustomerPage(CustomerSearchBean param) {
-        StringBuffer querySql = new StringBuffer("select t.cardno,t.custid,c.custname, " +
+        StringBuffer querySql = new StringBuffer("select t.cardno,c.custid,c.custname, " +
                 "t.bankcardno,t.cardphyid,c.phone,c.custtype,c.checkstatus from tb_customer c " +
                 "left join Tb_card t on t.custid=c.custid where 1=1 ");
         StringBuffer countSql = new StringBuffer("select count(*) as cnt from tb_customer c " +
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
index ae15d55..96f7b99 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
@@ -158,7 +158,7 @@
 
     private boolean checkRuleTimeError(String starttime, String endtime, String cardno, String custid) {
         Query query = entityManager.createNativeQuery("select count(a.id) from tb_discount_detail a, tb_discount_rule b where a.ruleid=b.ruleid and (b.status='uncheck' or b.status='normal') " +
-                "and a.cardno=:cardno and ((b.starttime<:starttime and b.endtime>:starttime) or (b.starttime<:endtime and b.endtime>:endtime)) ");
+                "and a.cardno=:cardno and ((:starttime between b.starttime and b.endtime) or (:endtime between b.starttime and b.endtime) or (b.starttime>:starttime and b.endtime<:endtime)) ");
         query.setParameter("cardno", cardno);
         query.setParameter("starttime", starttime);
         query.setParameter("endtime", endtime);
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 b86ea5c..d19ee55 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
@@ -54,7 +54,7 @@
     @Override
     public PageResult<TTransDtl> getTransDtlByParam(TransDtlSearchBean param) {
         Pageable pageable = PageRequest.of(param.getPageNo() - 1, param.getPageSize()
-                , Sort.by("billno"));
+                , Sort.by("billno").descending());
 
         Specification<TTransDtl> spec = gettTransDtlSpecification(param);
 
@@ -225,7 +225,7 @@
             transDtlDao.save(revDtl);
             return revDtl;
         }
-        revDtl.setAcctime(DateUtil.getNow("HHmmss"));
+        revDtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
         revDtl.setAccdate(date);
         revDtl.setRefno(reverseResp.getRefno());
         transDtlDao.save(revDtl);
@@ -287,8 +287,8 @@
     }
 
     @Override
-    public List<TTransDtl> getSubmittingTransdtl() {
-        return transDtlDao.findAllByStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
+    public List<TTransDtl> getSubmittingTransdtl(String date) {
+        return transDtlDao.findAllByStatusAndTransdate(RestaurantConstant.STATUS_TRANSDTL_WAIT,date);
     }
 
     @Override
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/WhitelistServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/WhitelistServiceImpl.java
index 465f1c8..963891a 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/WhitelistServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/WhitelistServiceImpl.java
@@ -312,8 +312,9 @@
 
     @Override
     public TWhitelistDevbind getWhitelistDevbindByDeviceId(Integer id) {
-        if (null != id) {
-            return WhitelistDevbindDao.findByDeviceid(id);
+        List<TWhitelistDevbind> lst= WhitelistDevbindDao.findByDeviceid(id);
+        if(lst.size()>0){
+            return lst.get(0);
         }
         return null;
     }
@@ -378,7 +379,7 @@
             } else if (1 != device.getState()) {
                 throw new WebCheckException("终端编号为[" + id + "]的设备状态异常");
             }
-            TWhitelistDevbind obind = WhitelistDevbindDao.findByDeviceid(id);
+            TWhitelistDevbind obind =getWhitelistDevbindByDeviceId(id);
             if (null != obind) {
                 throw new WebCheckException("终端编号为[" + id + "]的设备已有绑定关系");
             }
@@ -412,13 +413,14 @@
     }
 
     @Override
-    public List<TCardver> getDevBindCardver(Integer deviceid) {
+    public List<TCardver> getDevBindCardver(Integer deviceid,String cardverno) {
         StringBuffer sql = new StringBuffer("SELECT t.cardno,t.cardphyid,t.optype FROM tb_whitelist_detail w " +
                 "left join tb_cardver t on t.cardno=w.cardno and t.cardphyid=w.cardphyid " +
                 "left join tb_whitelist_devbind d on d.whitelistid=w.whitelistid " +
-                "where d.deviceid=:id");
+                "where d.deviceid=:id and t.cardverno>:cardverno");
         Query query = entityManager.createNativeQuery(sql.toString());
         query.setParameter("id", deviceid);
+        query.setParameter("cardverno", cardverno);
         query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TCardver.class));
         List<TCardver> list = query.getResultList();
         return list;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/task/RestaurantTask.java b/src/main/java/com/supwisdom/dlpay/restaurant/task/RestaurantTask.java
index deeeac2..3c9e0a2 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/task/RestaurantTask.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/task/RestaurantTask.java
@@ -46,7 +46,7 @@
         searchBean.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_UNCHECK);
 
         List<CustomerShowBean> dtls=customerService.getCustomerPage(searchBean).getData();
-        logger.info("正在同步"+dtls.size()+"名人员");
+        logger.info("正同步"+dtls.size()+"名人员");
         if(dtls.size()>0){
             for(CustomerShowBean dtl:dtls){
                 QueryUserParam param=new QueryUserParam();
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
index 786f0a8..534fa61 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
@@ -1,51 +1,51 @@
 package com.supwisdom.dlpay.restaurant.util;
 
 public class RestaurantConstant {
-  public static final String STATUS_DISCOUNTRULE_UNCHECK = "uncheck"; //待审核
-  public static final String STATUS_DISCOUNTRULE_NORMAL = "normal";  //有效
-  public static final String STATUS_DISCOUNTRULE_CLOSED = "closed";   //无效
-  public static final String STATUS_DISCOUNTRULE_REJECT = "reject";   //驳回
+    public static final String STATUS_DISCOUNTRULE_UNCHECK = "uncheck"; //待审核
+    public static final String STATUS_DISCOUNTRULE_NORMAL = "normal";  //有效
+    public static final String STATUS_DISCOUNTRULE_CLOSED = "closed";   //无效
+    public static final String STATUS_DISCOUNTRULE_REJECT = "reject";   //驳回
 
-  public static final String STATUS_CHECKSTATUS_UNCHECK = "uncheck"; //待审核
-  public static final String STATUS_CHECKSTATUS_NORMAL = "normal";  //有效
-  public static final String STATUS_CHECKSTATUS_FAIL = "fail";  //无效
-  public static final String STATUS_CHECKSTATUS_REJECT = "reject";   //驳回
+    public static final String STATUS_CHECKSTATUS_UNCHECK = "uncheck"; //待审核
+    public static final String STATUS_CHECKSTATUS_NORMAL = "normal";  //有效
+    public static final String STATUS_CHECKSTATUS_FAIL = "fail";  //无效
+    public static final String STATUS_CHECKSTATUS_REJECT = "reject";   //驳回
 
-  public static final String TRANSMODE_CARD = "card";  //卡消费
-  public static final String TRANSMODE_CODE = "code";  //二维码消费
+    public static final String TRANSMODE_CARD = "card";  //卡消费
+    public static final String TRANSMODE_CODE = "code";  //二维码消费
 
 
-  public static final String STATUS_TRANSDTL_INIT = "init";   //初始化
-  public static final String STATUS_TRANSDTL_WAIT = "wip";   //提交中
-  public static final String STATUS_TRANSDTL_SUCCESS = "success";   //已入账
-  public static final String STATUS_TRANSDTL_FAIL = "fail";   //取消
+    public static final String STATUS_TRANSDTL_INIT = "init";   //初始化
+    public static final String STATUS_TRANSDTL_WAIT = "wip";   //提交中
+    public static final String STATUS_TRANSDTL_SUCCESS = "success";   //已入账
+    public static final String STATUS_TRANSDTL_FAIL = "fail";   //取消
 
 
+    public static final String TRANSTYPE_TRANSDTL_ONLINE = "online";   //联机
+    public static final String TRANSTYPE_TRANSDTL_OFFLINE = "offline";   //脱机
+    public static final String TRANSTYPE_TRANSDTL_REVERT = "revert";   //冲正
 
-  public static final String TRANSTYPE_TRANSDTL_ONLINE = "online";   //联机
-  public static final String TRANSTYPE_TRANSDTL_OFFLINE = "offline";   //脱机
-  public static final String TRANSTYPE_TRANSDTL_REVERT = "revert";   //冲正
+    public static final String MEALTYPE_BREAKFAST = "breakfast";
+    public static final String MEALTYPE_LUNCH = "lunch";
+    public static final String MEALTYPE_DINNER = "dinner";
 
-  public static final String MEALTYPE_BREAKFAST="breakfast";
-  public static final String MEALTYPE_LUNCH="lunch";
-  public static final String MEALTYPE_DINNER="dinner";
+    public static final String STATUS_CARD_NORMAL = "normal";   //正常
+    public static final String STATUS_CARD_LOGOUT = "logout";   //注销
+    public static final String STATUS_CARD_LOST = "lost";   //挂失
+    public static final String STATUS_CARD_FROZEN = "frozen";   //冻结
+    public static final String STATUS_CARD_LOCK = "lock";   //锁卡
+    public static final String STATUS_CARD_EXPIRE = "expire";   //过期
 
-  public static final String STATUS_CARD_NORMAL = "normal";   //正常
-  public static final String STATUS_CARD_LOGOUT= "logout";   //注销
-  public static final String STATUS_CARD_LOST= "lost";   //挂失
-  public static final String STATUS_CARD_FROZEN = "frozen";   //冻结
-  public static final String STATUS_CARD_LOCK= "lock";   //锁卡
-  public static final String STATUS_CARD_EXPIRE= "expire";   //过期
-
-  public static final String OPTYPE_CARD_OPEN= "open";   //开卡
-  public static final String OPTYPE_CARD_DELETE= "delete";   //过期
+    public static final String OPTYPE_CARD_OPEN = "open";   //开卡
+    public static final String OPTYPE_CARD_DELETE = "delete";   //过期
 
 
-  public static final String RULETYPE_QUOTA = "quota"; //定额
-  public static final String RULETYPE_REDUCTION = "reduction"; //减免
-  public static final String RULETYPE_DISCOUNT = "discount"; //折扣
+    public static final String RULETYPE_QUOTA = "quota"; //定额
+    public static final String RULETYPE_REDUCTION = "reduction"; //减免
+    public static final String RULETYPE_DISCOUNT = "discount"; //折扣
 
 
-  public static final int POS_TIME_ERROR_DIFFMINS = 10; //设备时钟误差
+    public static final int POS_TIME_ERROR_DIFFMINS = 10; //设备时钟误差
+    public static final int TRANSDTL_STATUS_WIT=55555;
 
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
index 24567ce..4eb8794 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/controller/security_controller.kt
@@ -93,7 +93,7 @@
                 it.loginTimestamp = now
                 it.roles = api.roles
                 it.tenantId = tetantId
-                it.token = HmacUtil.HMACSHA256( api.secret,token)
+                it.token = HmacUtil.HMACSHA256( token,api.secret)
             }.also {
                 apiClientRepository.save(it)
             }
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 3a1691f..c819258 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -28,6 +28,7 @@
 INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('limit_switch', 1, NULL, NULL, '卡限开关 (0-关闭,1-开启)', '1', 'B');
 INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('max_cardbal', 1, '99999999', '1', '最大卡余额 ([1-99999999] 单位:分)', '99999', 'N');
 INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('max_offline_days', 1, '90', '0', '脱机使用最大天数 ([1-90] 单位:天)', '7', 'N');
+INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('max_day_offline_amt', 1, '99999999', '0', '脱机使用额度 ([1-99999999] 单位:分)', '10000', 'N');
 INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('max_pay_cnt', 1, '999999', '1', '卡最大使用次数 ([1-999999])', '65535', 'N');
 INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('min_cardbal', 1, '99999', '0', '最小卡余额 ([0-99999] 单位:分)', '1', 'N');
 INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('offline_flag', 1, NULL, NULL, '脱机消费时限开关 (0-关闭, 1-开启)', '1', 'B');
@@ -82,7 +83,7 @@
 INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('online', 'transtypeList', '联机', '交易类型');
 INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('offline', 'transtypeList', '脱机', '交易类型');
 INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('revert', 'transtypeList', '冲正', '交易类型');
-INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('normal', 'transtatusList', '成功', '流水状态');
+INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('success', 'transtatusList', '成功', '流水状态');
 INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('fail', 'transtatusList', '失败', '流水状态');
 INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('wip', 'transtatusList', '等待', '流水状态');
 INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('init', 'transtatusList', '初始化', '流水状态');
diff --git a/src/main/resources/templates/restaurant/devicecheck/index.html b/src/main/resources/templates/restaurant/devicecheck/index.html
index 76ba2b0..6fb39e4 100644
--- a/src/main/resources/templates/restaurant/devicecheck/index.html
+++ b/src/main/resources/templates/restaurant/devicecheck/index.html
@@ -56,7 +56,6 @@
                     {field: 'devphyid', sort: true, width: 200, title: '设备物理id'},
                     {field: 'shopid', sort: true, width: 200, title: '商户id'},
                     {field: 'factoryid', sort: true, width: 200, title: '设备厂商'},
-                    {field: 'state', title: '状态', sort: true, width: 100, templet: '#device-dev-tpl-state'},
                     {
                         field: 'checkstatus',
                         title: '审核状态',
diff --git a/src/main/resources/templates/restaurant/discountrule/rulecheck.html b/src/main/resources/templates/restaurant/discountrule/rulecheck.html
index 8895539..75bcab1 100644
--- a/src/main/resources/templates/restaurant/discountrule/rulecheck.html
+++ b/src/main/resources/templates/restaurant/discountrule/rulecheck.html
@@ -63,6 +63,8 @@
                                     return '定额';
                                 } else if ('reduction' == d.ruletype) {
                                     return '减免';
+                                } else if('discount' == d.ruletype){
+                                    return '折扣';
                                 } else {
                                     return d.ruletype;
                                 }
diff --git a/src/main/resources/templates/restaurant/transdtl/index.html b/src/main/resources/templates/restaurant/transdtl/index.html
index 9fb62b3..2b3ca6f 100644
--- a/src/main/resources/templates/restaurant/transdtl/index.html
+++ b/src/main/resources/templates/restaurant/transdtl/index.html
@@ -136,35 +136,9 @@
                     {field: 'billno', title: '交易号', fixed: 'left',width:200, sort: true},
                     {field: 'amount', title: '交易金额',width:100, sort: true,
                         templet: function (item) {
-                            return numberFormat(item.amount,2);
+                            return parseFloat(item.amount).toFixed(2);
                         }},
                     {
-                        field: 'accdate',
-                        title: '交易日期',
-                        sort: true,
-                        width:120,
-                        templet: function (item) {
-                            var date = item.accdate;
-                            if (date != null) {
-                                return date.substr(0, 4) + '-' + date.substr(4, 2) + '-' + date.substr(6, 2);
-                            }
-                            return '';
-                        }
-                    },
-                    {
-                        field: 'acctime',
-                        title: '交易时间',
-                        sort: true,
-                        width:100,
-                        templet: function (item) {
-                            var time = item.transtime;
-                            if (time != null) {
-                                return time.substr(0, 2) + ':' + time.substr(2, 2) + ':' + time.substr(4, 2);
-                            }
-                            return '';
-                        }
-                    },
-                    {
                         field: 'transdate',
                         title: '交易日期',
                         sort: true,
@@ -190,6 +164,32 @@
                             return '';
                         }
                     },
+                    {
+                        field: 'accdate',
+                        title: '记账日期',
+                        sort: true,
+                        width:120,
+                        templet: function (item) {
+                            var date = item.accdate;
+                            if (date != null) {
+                                return date.substr(0, 4) + '-' + date.substr(4, 2) + '-' + date.substr(6, 2);
+                            }
+                            return '';
+                        }
+                    },
+                    {
+                        field: 'acctime',
+                        title: '记账时间',
+                        sort: true,
+                        width:100,
+                        templet: function (item) {
+                            var time = item.transtime;
+                            if (time != null) {
+                                return time.substr(0, 2) + ':' + time.substr(2, 2) + ':' + time.substr(4, 2);
+                            }
+                            return '';
+                        }
+                    },
                     {field: 'termid',width:100, title: '终端号', sort: true},
                     {
                         field: 'shopid',
diff --git a/src/main/resources/templates/restaurant/whitelist/whitelistform.html b/src/main/resources/templates/restaurant/whitelist/whitelistform.html
index 23e4133..aaba071 100644
--- a/src/main/resources/templates/restaurant/whitelist/whitelistform.html
+++ b/src/main/resources/templates/restaurant/whitelist/whitelistform.html
@@ -17,7 +17,7 @@
             </button>
         </div>
         <div class="layui-input-inline" style="padding-top: 15px;">
-            <a th:href="@{/discountrule/downloadexcel}" style="color: blue;text-decoration: none;cursor: pointer;">下载名单模板</a>
+            <a th:href="@{/whitelist/downloadexcel}" style="color: blue;text-decoration: none;cursor: pointer;">下载名单模板</a>
         </div>
     </div>
 
diff --git a/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java b/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
index b6e3c5f..ed1913e 100644
--- a/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
+++ b/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
@@ -3,10 +3,7 @@
 
 import com.supwisdom.dlpay.api.bean.*;
 import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
-import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
-import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
-import com.supwisdom.dlpay.paysdk.proxy.ShopProxy;
-import com.supwisdom.dlpay.paysdk.proxy.UserProxy;
+import com.supwisdom.dlpay.paysdk.proxy.*;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -42,6 +39,9 @@
     private ApiLoginProxy apiLoginProxy;
 
     @Autowired
+    private ConsumePropxy consumePropxy;
+
+    @Autowired
     private UserProxy userProxy;
 
     @Autowired
@@ -101,4 +101,16 @@
 
 
     }
+
+
+    @org.junit.Test
+    public void getQrcode() {
+        ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+        helper.login(appid, secret);
+        DoorQRCodeParam qrparam = new DoorQRCodeParam();
+        qrparam.setQrcode("9BZ0ORIOTBLDGPX9C60ORQ");
+        DoorQrcodeResponse qrcoderesp = consumePropxy.qrcodequery(qrparam);
+        System.out.println(qrcoderesp.getCitycardno()+":"+qrcoderesp.getCardphyid());
+    }
+
 }