diff --git a/build.gradle b/build.gradle
index c3e92ce..97f290e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -56,7 +56,7 @@
     compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.10.1'
     compile group: 'org.apache.poi', name: 'poi-ooxml-schemas', version: '3.10.1'
     compile group: 'org.apache.poi', name: 'poi-scratchpad', version: '3.10.1'
-    compile 'com.supwisdom:payapi-sdk:e4bf762'
+    compile 'com.supwisdom:payapi-sdk:ae0b0e2'
     compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.3.4.RELEASE'
 
 
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index cced0a5..4154d02 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -8,7 +8,7 @@
 #logging.level.org.hibernate.SQL=DEBUG
 # Postgresql settings
 spring.datasource.platform=postgresql
-spring.datasource.url=jdbc:postgresql://172.28.201.101:25432/restauranttest
+spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/restauranttest
 spring.datasource.username=payapi
 spring.datasource.password=123456
 database.dbtype=postgresql
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/APIResponse.java b/src/main/java/com/supwisdom/dlpay/api/bean/APIResp.java
similarity index 92%
rename from src/main/java/com/supwisdom/dlpay/api/bean/APIResponse.java
rename to src/main/java/com/supwisdom/dlpay/api/bean/APIResp.java
index 222530e..0e0bf7e 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/APIResponse.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/APIResp.java
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.bean;
 
-public class APIResponse {
+public class APIResp {
   private String retcode;
   private String retmsg;
 
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayAccqueryResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayAccqueryResp.java
index 36b7a7d..cb99fe9 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayAccqueryResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayAccqueryResp.java
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.bean;
 
-public class PosPayAccqueryResp extends APIResponse {
+public class PosPayAccqueryResp extends APIResp {
     private String expiredate;
     private String status;
     private String username;
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayConfirmResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayConfirmResp.java
index a7a8fc9..39f2163 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayConfirmResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayConfirmResp.java
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.bean;
 
-public class PosPayConfirmResp extends APIResponse {
+public class PosPayConfirmResp extends APIResp {
   private String billno;
   private boolean require_query;
   private Double amount;
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamResp.java
index 8b2b6ba..db7d6fb 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayGolbalParamResp.java
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.bean;
 
-public class PosPayGolbalParamResp extends APIResponse {
+public class PosPayGolbalParamResp extends APIResp {
     private String upgrade_version;
     private String upgrade_url;
 
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 c0066b3..a677346 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayHeartBeatResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayHeartBeatResp.java
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.bean;
 
-public class PosPayHeartBeatResp extends APIResponse {
+public class PosPayHeartBeatResp extends APIResp {
     private Integer paragroupid;
     private Integer paraverno;
     private String cardverno;
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayInitResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayInitResp.java
index 4253741..d8641ec 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayInitResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayInitResp.java
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.bean;
 
-public class PosPayInitResp extends APIResponse {
+public class PosPayInitResp extends APIResp {
   private String billno;
   private String username;
   private String userid;
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 d3ad990..0c28aa5 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayLoginResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayLoginResp.java
@@ -1,7 +1,7 @@
 package com.supwisdom.dlpay.api.bean;
 
 
-public class PosPayLoginResp extends APIResponse {
+public class PosPayLoginResp extends APIResp {
     private Integer paragroupid;
     private Integer paraverno;
     private Integer onlineseqno;
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayOfflineDtlResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayOfflineDtlResp.java
index 84df6f8..4355e6d 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayOfflineDtlResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayOfflineDtlResp.java
@@ -2,7 +2,7 @@
 
 
 
-public class PosPayOfflineDtlResp extends APIResponse {
+public class PosPayOfflineDtlResp extends APIResp {
   private Integer termseqno;
 
   public Integer getTermseqno() {
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java
index e35d45c..42f1e15 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayQuerysalesResp.java
@@ -1,14 +1,11 @@
 package com.supwisdom.dlpay.api.bean;
 
-
-import java.math.BigInteger;
-
-public class PosPayQuerysalesResp extends APIResponse {
+public class PosPayQuerysalesResp extends APIResp {
   private String salesdate;
-  private Integer salesamt;
-  private BigInteger salescnt;
-  private Integer managefeeamt;
-  private BigInteger managefeecnt;
+  private Long salesamt;
+  private Long salescnt;
+  private Long managefeeamt;
+  private Long managefeecnt;
 
   public String getSalesdate() {
     return salesdate;
@@ -18,35 +15,35 @@
     this.salesdate = salesdate;
   }
 
-  public Integer getSalesamt() {
+  public Long getSalesamt() {
     return salesamt;
   }
 
-  public void setSalesamt(Integer salesamt) {
+  public void setSalesamt(Long salesamt) {
     this.salesamt = salesamt;
   }
 
-  public BigInteger getSalescnt() {
+  public Long getSalescnt() {
     return salescnt;
   }
 
-  public void setSalescnt(BigInteger salescnt) {
+  public void setSalescnt(Long salescnt) {
     this.salescnt = salescnt;
   }
 
-  public Integer getManagefeeamt() {
+  public Long getManagefeeamt() {
     return managefeeamt;
   }
 
-  public void setManagefeeamt(Integer managefeeamt) {
+  public void setManagefeeamt(Long managefeeamt) {
     this.managefeeamt = managefeeamt;
   }
 
-  public BigInteger getManagefeecnt() {
+  public Long getManagefeecnt() {
     return managefeecnt;
   }
 
-  public void setManagefeecnt(BigInteger managefeecnt) {
+  public void setManagefeecnt(Long managefeecnt) {
     this.managefeecnt = managefeecnt;
   }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayReverseResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayReverseResp.java
index 8a79317..2243a92 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayReverseResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayReverseResp.java
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.bean;
 
-public class PosPayReverseResp extends APIResponse {
+public class PosPayReverseResp extends APIResp {
   private Integer termseqno;
 
   public Integer getTermseqno() {
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPaySysparaResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPaySysparaResp.java
index 6814077..f941716 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPaySysparaResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPaySysparaResp.java
@@ -1,11 +1,8 @@
 package com.supwisdom.dlpay.api.bean;
 
-import com.supwisdom.dlpay.restaurant.domain.TDevpara;
-
 import java.util.ArrayList;
-import java.util.Map;
 
-public class PosPaySysparaResp extends APIResponse {
+public class PosPaySysparaResp extends APIResp {
   private Integer paragroupid;
   private Integer paraverno;
   private ArrayList<DevparaBean> syspara;
diff --git a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayWhitelistResp.java b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayWhitelistResp.java
index bb0a69d..c1a5032 100644
--- a/src/main/java/com/supwisdom/dlpay/api/bean/PosPayWhitelistResp.java
+++ b/src/main/java/com/supwisdom/dlpay/api/bean/PosPayWhitelistResp.java
@@ -2,7 +2,7 @@
 
 import java.util.ArrayList;
 
-public class PosPayWhitelistResp extends APIResponse {
+public class PosPayWhitelistResp extends APIResp {
   private String cardverno;
   private Integer count;
   private ArrayList<CardverBean> whitelist;
diff --git a/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java b/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java
index 05f9022..61addfa 100644
--- a/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/service/impl/PayApiServiceImpl.java
@@ -21,7 +21,7 @@
     @Override
     public CitizenPayResponse citizencardPayinit(CitizenCardPayinitParam param) {
       //  String gsonString = new Gson().toJson(param);
-        RestTemplate client=new RestTemplate();
+//        RestTemplate client=new RestTemplate();
        /* client.postForEntity(payapiurl+"/api/consume/citizencard/payinit")*/
         return null;
     }
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 9ffa4a5..320c8bc 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
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.api.service.impl;
 
 import com.supwisdom.dlpay.api.bean.*;
-import com.supwisdom.dlpay.api.service.PayApiService;
 import com.supwisdom.dlpay.api.service.PosPayService;
 import com.supwisdom.dlpay.framework.dao.BusinessparaDao;
 import com.supwisdom.dlpay.framework.domain.TBusinesspara;
@@ -50,8 +49,6 @@
     private ShopSettlementService shopSettlementService;
     @Autowired
     private BusinessparaDao businessparaDao;
-    @Autowired
-    private PayApiService payApiService;
 
 
 
@@ -163,19 +160,20 @@
 
 
         TTransDtl tTransdtl = new TTransDtl();
-        tTransdtl.setAccdate(req.getTermdate());
+        tTransdtl.setAccdate(systemUtilService.getAccdate());
         tTransdtl.setTermid(tDevice.getId());
         tTransdtl.setBillno(systemUtilService.getRefno());
         tTransdtl.setShopid(tDevice.getShopid());
-        tTransdtl.setAcctime(req.getTermtime());
+        tTransdtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
 
         tTransdtl.setCusttype(customer.getCusttype());
-        tTransdtl.setTransdate(DateUtil.getNow("yyyyMMdd"));
-        tTransdtl.setTranstime(DateUtil.getNow("HHmmss"));
+        tTransdtl.setTransdate(req.getTermdate());
+        tTransdtl.setTranstime(req.getTermtime());
         tTransdtl.setCardno(req.getCardno());
         tTransdtl.setTransmode(req.getTranstype());
         tTransdtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_ONLINE);
         tTransdtl.setTermsqlno(req.getTermseqno());
+        tTransdtl.setAmount(0D);
         tTransdtl.setManagefee(0.0);
         tTransdtl.setRevflag(0);
         List<TMealtype> mealtypes = mealTypeDao.findAllByOrderByEndtime();
@@ -206,17 +204,17 @@
 
         TTransDtl dtl=transDtlService.saveTransdtl(tTransdtl);
 
-        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(0);
-        CitizenPayResponse response=payApiService.citizencardPayinit(param);
-        if (response.getRetcode()!=0){
-            dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-        }
+//        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(0);
+//        CitizenPayResponse response=payApiService.citizencardPayinit(param);
+//        if (response.getRetcode()!=0){
+//            dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+//        }
 
         resp.setBillno(tTransdtl.getBillno());
         resp.setRetcode(ErrorCode.ERRIF_OK);
@@ -258,6 +256,10 @@
         tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
         transDtlService.saveTransdtl(tTransdtl);
 
+        //TODO:调核心平台初始化确认 逻辑缺！！！
+        tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+        transDtlService.saveTransdtl(tTransdtl);
+
 
         resp.setBillno(req.getBillno());
         resp.setAmount(tTransdtl.getAmount()*100);
@@ -480,9 +482,9 @@
 
         resp.setRetcode(ErrorCode.ERRIF_OK);
         resp.setRetmsg("返回成功");
-        resp.setManagefeeamt(feeAmtBean.getManagefeeamt()*100);
+        resp.setManagefeeamt(feeAmtBean.getManagefeeamt());
         resp.setManagefeecnt(feeAmtBean.getManagefeecnt());
-        resp.setSalesamt(salesAmtBean.getSalesamt()*100);
+        resp.setSalesamt(salesAmtBean.getSalesamt());
         resp.setSalescnt(salesAmtBean.getSalescnt());
         resp.setSalesdate(req.getTermdate());
         return resp;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/AmountCountBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/AmountCountBean.java
new file mode 100644
index 0000000..7dd29ce
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/AmountCountBean.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+public class AmountCountBean {
+  private Double totalamt;
+  private Long totalcnt;
+
+  public AmountCountBean() {
+  }
+
+  public AmountCountBean(Double totalamt, Long totalcnt) {
+    this.totalamt = totalamt;
+    this.totalcnt = totalcnt;
+  }
+
+  public Double getTotalamt() {
+    return totalamt;
+  }
+
+  public void setTotalamt(Double totalamt) {
+    this.totalamt = totalamt;
+  }
+
+  public Long getTotalcnt() {
+    return totalcnt;
+  }
+
+  public void setTotalcnt(Long totalcnt) {
+    this.totalcnt = totalcnt;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java
index 6882462..ed8dd1f 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/ManageFeeAmtBean.java
@@ -1,26 +1,31 @@
 package com.supwisdom.dlpay.restaurant.bean;
 
-
-import java.math.BigInteger;
-
 public class ManageFeeAmtBean {
-    private Integer managefeeamt;
+  private Long managefeeamt;
 
-    private BigInteger managefeecnt;
+  private Long managefeecnt;
 
-    public Integer getManagefeeamt() {
-        return managefeeamt;
-    }
+  public ManageFeeAmtBean() {
+  }
 
-    public void setManagefeeamt(Integer managefeeamt) {
-        this.managefeeamt = managefeeamt;
-    }
+  public ManageFeeAmtBean(Long managefeeamt, Long managefeecnt) {
+    this.managefeeamt = managefeeamt;
+    this.managefeecnt = managefeecnt;
+  }
 
-    public BigInteger getManagefeecnt() {
-        return managefeecnt;
-    }
+  public Long getManagefeeamt() {
+    return managefeeamt;
+  }
 
-    public void setManagefeecnt(BigInteger managefeecnt) {
-        this.managefeecnt = managefeecnt;
-    }
+  public void setManagefeeamt(Long managefeeamt) {
+    this.managefeeamt = managefeeamt;
+  }
+
+  public Long getManagefeecnt() {
+    return managefeecnt;
+  }
+
+  public void setManagefeecnt(Long managefeecnt) {
+    this.managefeecnt = managefeecnt;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java
index b036507..31b4454 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/SalesAmtBean.java
@@ -1,26 +1,31 @@
 package com.supwisdom.dlpay.restaurant.bean;
 
-
-import java.math.BigInteger;
-
 public class SalesAmtBean{
-    private Integer salesamt;
+    private Long salesamt;
 
-    private BigInteger salescnt;
+    private Long salescnt;
 
-    public Integer getSalesamt() {
+    public SalesAmtBean() {
+    }
+
+    public SalesAmtBean(Long salesamt, Long salescnt) {
+        this.salesamt = salesamt;
+        this.salescnt = salescnt;
+    }
+
+    public Long getSalesamt() {
         return salesamt;
     }
 
-    public void setSalesamt(Integer salesamt) {
+    public void setSalesamt(Long salesamt) {
         this.salesamt = salesamt;
     }
 
-    public BigInteger getSalescnt() {
+    public Long getSalescnt() {
         return salescnt;
     }
 
-    public void setSalescnt(BigInteger salescnt) {
+    public void setSalescnt(Long salescnt) {
         this.salescnt = salescnt;
     }
 }
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 4a280d0..add5d95 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
@@ -4,10 +4,8 @@
 import com.supwisdom.dlpay.framework.dao.ShopSettlementDao;
 import com.supwisdom.dlpay.framework.domain.TShopSettlement;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.util.DateUtil;
-import com.supwisdom.dlpay.framework.util.ExportExcel;
-import com.supwisdom.dlpay.framework.util.PageResult;
-import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.*;
+import com.supwisdom.dlpay.restaurant.bean.AmountCountBean;
 import com.supwisdom.dlpay.restaurant.bean.ManageFeeAmtBean;
 import com.supwisdom.dlpay.restaurant.bean.SalesAmtBean;
 import com.supwisdom.dlpay.restaurant.bean.TransDtlSearchBean;
@@ -197,38 +195,44 @@
     @Override
     public ManageFeeAmtBean getManageFeeToday(String transdate, Integer termid) {
         StringBuffer querySql = new StringBuffer(
-                "select sum(managefee) as managefeeamt,count(managefee) as managefeecnt " +
-                        " from tb_transdtl where transdate=:transdate and termid=:termid and managefee!=0 ");
+                "select sum(managefee) as totalamt, count(billno) as totalcnt " +
+                        " from tb_transdtl where transdate=:transdate and termid=:termid and managefee!=0 and status=:stat ");
 
         Query query = entityManager.createNativeQuery(querySql.toString());
         query.setParameter("transdate",transdate);
         query.setParameter("termid",termid);
-        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(ManageFeeAmtBean.class));
-
-        List<ManageFeeAmtBean> list = query.getResultList();
-        ManageFeeAmtBean bean=list.get(0);
-        if(bean.getManagefeeamt()==null){
-            bean.setManagefeeamt(0);
+        query.setParameter("stat", RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(AmountCountBean.class));
+        List<AmountCountBean> list = query.getResultList();
+        if(!StringUtil.isEmpty(list)){
+            AmountCountBean acb = list.get(0);
+            ManageFeeAmtBean bean = new ManageFeeAmtBean();
+            bean.setManagefeecnt(acb.getTotalcnt());
+            bean.setManagefeeamt(acb.getTotalamt() == null ? 0 : Math.round(acb.getTotalamt() * 100));
+            return bean;
         }
-        return bean;
+        return new ManageFeeAmtBean(0l,0l);
     }
 
     @Override
     public SalesAmtBean getSalesToday(String transdate, Integer termid) {
-        StringBuffer querySql = new StringBuffer("select sum(amount) as salesamt,count(amount) as salescnt "+
-                "from tb_transdtl where transdate=:transdate and termid=:termid");
+        StringBuffer querySql = new StringBuffer("select sum(amount) as totalamt,count(billno) as totalcnt " +
+            "from tb_transdtl where transdate=:transdate and termid=:termid and status=:stat ");
 
         Query query = entityManager.createNativeQuery(querySql.toString());
-        query.setParameter("transdate",transdate);
-        query.setParameter("termid",termid);
-        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(SalesAmtBean.class));
-
-        List<SalesAmtBean> list = query.getResultList();
-        SalesAmtBean bean=list.get(0);
-        if(bean.getSalesamt()==null){
-            bean.setSalesamt(0);
+        query.setParameter("transdate", transdate);
+        query.setParameter("termid", termid);
+        query.setParameter("stat", RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(AmountCountBean.class));
+        List<AmountCountBean> list = query.getResultList();
+        if (!StringUtil.isEmpty(list)) {
+            AmountCountBean acb = list.get(0);
+            SalesAmtBean bean = new SalesAmtBean();
+            bean.setSalescnt(acb.getTotalcnt());
+            bean.setSalesamt(acb.getTotalamt() == null ? 0 : Math.round(acb.getTotalamt() * 100));
+            return bean;
         }
-        return bean;
+        return new SalesAmtBean(0L, 0L);
     }
 
     @Override
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 142202b..b07eb45 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
@@ -8,7 +8,7 @@
 
   public static final String STATUS_TRANSDTL_INIT = "init";   //初始化
   public static final String STATUS_TRANSDTL_WAIT = "wip";   //提交中
-  public static final String STATUS_TRANSDTL_SUCCESS = "suc";   //已入账
+  public static final String STATUS_TRANSDTL_SUCCESS = "success";   //已入账
   public static final String STATUS_TRANSDTL_FAIL = "fail";   //取消
 
 
