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 7644bdc..56ac747 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
@@ -416,7 +416,14 @@
                 resp.setRetmsg("客户" + tTransdtl.getCustid() + "不存在");
                 return resp;
             }
-            Double amount = req.getAmount() / 100.0;
+            Integer amt=req.getAmount();
+            if(null==amt||0==amt){
+                resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
+                resp.setRetmsg("交易金额不得为0");
+
+                return resp;
+            }
+            Double amount = amt/ 100.0;
             Double cntamount = 0.0;
             logger.info("交易号：" + tTransdtl.getBillno() + ",,,交易金额：" + req.getAmount());
             DiscountBean bean = deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(), req.getTermtime(), cus.getCustid());
@@ -453,8 +460,6 @@
 
             tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
             TTransDtl dtl = transDtlService.saveTransdtl(tTransdtl);
-
-
    /*     if(RestaurantConstant.TRANSMODE_CODE.equals(dtl.getTransmode())){
             DoorQRCodeParam qrparam=new DoorQRCodeParam();
             qrparam.setAmount(MoneyUtil.YuanToFen(tTransdtl.getAmount()));
@@ -485,7 +490,7 @@
             param.setAmount(MoneyUtil.YuanToFen(dtl.getAmount()));
             param.setDtltype("canteen");
             CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
-            if (response.getRetcode() == 0) {
+            if (response.getRetcode() == 0||!StringUtil.isEmpty(response.getRetmsg())) {
                 tTransdtl.setRefno(response.getRefno());
                 CitizenCardPayfinishParam confirmParam = new CitizenCardPayfinishParam();
                 confirmParam.setRefno(response.getRefno());
@@ -548,17 +553,35 @@
             resp.setRetmsg("交易参考号" + req.getBillno() + "不存在");
             return resp;
         }
+        if(RestaurantConstant.CHKFILE_STATUS_INIT.equals(tTransdtl.getStatus())){
+            resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
+            resp.setRetmsg("交易超时");
+            return resp;
+        }
 
         QueryDtlResultParam param = new QueryDtlResultParam();
         param.setRefno(tTransdtl.getRefno());
         param.setBillno(tTransdtl.getBillno());
         param.setShopaccno(tTransdtl.getShopid());
         QueryTransDtlResponse queryresp = transactionProxy.queryDtlResult(param);
+        if(0!=queryresp.getRetcode()){
+            resp.setRetcode(queryresp.getRetcode()+"");
+            resp.setRetmsg(queryresp.getRetmsg());
+            return resp;
+        }
+        logger.info("查询交易参考号："+queryresp.getRefno()+";;流水状态："+queryresp.getStatus()+";;查询接口返回："+queryresp.getRetmsg());
+
+        if(RestaurantConstant.CHKDTL_RESOLVED_FAIL.equals(queryresp.getStatus())){
+            resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
+            resp.setRetmsg("交易失败");
+            return resp;
+        }
         if (RestaurantConstant.STATUS_TRANSDTL_WAIT.equals(queryresp.getStatus())) {
             resp.setRequire_query(true);
         } else {
             resp.setRequire_query(false);
         }
+
         resp.setBillno(tTransdtl.getBillno());
         Double retAmount = tTransdtl.getAmount() * 100;
         resp.setAmount(retAmount.intValue());
