diff --git a/build.gradle b/build.gradle
index cf76fc3..431798f 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:ae0b0e2'
+    compile 'com.supwisdom:payapi-sdk:55725ca'
     compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.3.4.RELEASE'
 
 
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 9bb853f..d733c84 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
@@ -9,7 +9,10 @@
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.api.util.ErrorCode;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.MoneyUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.paysdk.proxy.CitizenCardPayProxy;
+import com.supwisdom.dlpay.paysdk.proxy.TransactionProxy;
 import com.supwisdom.dlpay.restaurant.bean.DiscountBean;
 import com.supwisdom.dlpay.restaurant.bean.ManageFeeAmtBean;
 import com.supwisdom.dlpay.restaurant.bean.SalesAmtBean;
@@ -59,6 +62,10 @@
     private DiscountRuleDao discountRuleDao;
     @Autowired
     private DeviceDiscountRuleService deviceDiscountRuleService;
+    @Autowired
+    private CitizenCardPayProxy citizenCardPayProxy;
+    @Autowired
+    private TransactionProxy transactionProxy;
 
 
     @Override
@@ -85,21 +92,19 @@
        /* if (groupid == 0) {
             groupid = 1;
         }*/
-        TDevparaGroup group = deviceParamService.getDevparaGroupByGroupid(groupid);
-        if (null == group) {
+        TDevparaGroup group=null;
+        TDevparaBind bind = deviceParamService.getDevparaBindByDeviceid(tDevice.getId());
+        if (null == bind) {
             group=deviceParamService.getDefaultDevparaGroup();
-            if(null ==group){
-                resp.setRetcode(ErrorCode.ERRIF_POS_NOFUNC);
-                resp.setRetmsg("未找到" + req.getDevphyid() + "参数组");
-                return resp;
-            }
+        }else{
+            group=deviceParamService.getDevparaGroupByGroupid(groupid);
         }
+
+
         tDevice.setRunstatus(1);
         tDevice.setLastlogintime(sysdt);
         deviceService.saveDevice(tDevice);
-
         if(group.getGlobalflag()==false){
-            TDevparaBind bind = deviceParamService.getDevparaBindByDeviceid(tDevice.getId());
             if (null == bind) {
                 bind = new TDevparaBind();
                 bind.setDeviceid(tDevice.getId());
@@ -131,7 +136,6 @@
             resp.setRetmsg("设备不存在");
             return resp;
         }
-        //TODO:改 检查卡状态
         TCard tCard = cardService.getCardByCardnoAndCardphyid(req.getCardno(), req.getCardphyid());
         if (null == tCard) {
             resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
@@ -165,7 +169,6 @@
             return resp;
         }
 
-        //TODO:改 同一流水号判重？？二维码消费逻辑:请求核心平台解码获取身份
         TTransDtl tTransdtl = new TTransDtl();
         tTransdtl.setAccdate(systemUtilService.getAccdate());
         tTransdtl.setTermid(tDevice.getId());
@@ -183,7 +186,8 @@
         tTransdtl.setAmount(0D);
         tTransdtl.setManagefee(0.0);
         tTransdtl.setRevflag(0);
-        List<TMealtype> mealtypes = mealTypeDao.findAllByOrderByEndtime(); //TODO:改 餐次设备时钟
+
+        List<TMealtype> mealtypes = mealTypeDao.findAllByOrderByEndtime();
         try {
             for (TMealtype m : mealtypes) {
                 if (DateUtil.compareTime(m.getEndtime(), req.getTermtime())) {
@@ -209,16 +213,8 @@
             tTransdtl.setCustname("");
         }
 
-        TTransDtl dtl=transDtlService.saveTransdtl(tTransdtl);
+        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);*/
         resp.setBillno(tTransdtl.getBillno());
         resp.setRetcode(ErrorCode.ERRIF_OK);
         resp.setAnonymous(false);
@@ -226,12 +222,7 @@
         resp.setSourcetype("pos");
         resp.setUserid(tTransdtl.getCustid());
         resp.setUsername(customer.getCustname());
-    /*    if (response.getRetcode()!=0){
-            dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-            transDtlService.saveTransdtl(dtl);
-            resp.setRetcode(response.getRetcode().toString());
-            resp.setRetmsg(response.getRetmsg());
-        }*/
+
 
         return resp;
     }
@@ -261,15 +252,26 @@
             return resp;
         }
 
-        Integer extamount = 0; //TODO:改 餐补规则的应用??
-   /*     Integer posamount=req.getAmount();
-        DiscountBean discountBean=deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(),req.getTermtime().substring(0,4));
-        if(null!=discountBean){
-            String
-        }*/
+        Double extamount = 0.0;
+        Double amount=req.getAmount() / 100.0;
 
-        tTransdtl.setAmount(req.getAmount() / 100.0);
-        tTransdtl.setManagefee(extamount / 100.0); //managefeetype :mealer discount
+        DiscountBean bean=deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(),req.getTermtime(), cus.getCustid());
+        if(null!=bean){
+            Integer limit=transDtlService.getDiscountLimitToday(req.getTermdate(),cus.getCustid(),bean.getRuleid());
+            if(bean.getLimitcnt()>=limit){
+                tTransdtl.setRuleid(bean.getRuleid());
+                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());
+                }
+            }
+        }
+
+        tTransdtl.setAmount(amount);
+        tTransdtl.setManagefee(extamount); //managefeetype :mealer discount
         tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
         TTransDtl dtl=transDtlService.saveTransdtl(tTransdtl);
 
@@ -279,46 +281,45 @@
         param.setTransdate(dtl.getTransdate());
         param.setTranstime(dtl.getTranstime());
         param.setCardNo(dtl.getCardno());
-        Double amt=dtl.getAmount()*100;
-        param.setAmount(amt.intValue());
+        param.setAmount(MoneyUtil.YuanToFen(dtl.getAmount()));
         param.setDtltype("canteen");
-        CitizenPayResponse response=payApiService.citizencardPayinit(param);
-        if(response.getRetcode()!=0){
+        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{
             tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-            transDtlService.saveTransdtl(tTransdtl);
+            tTransdtl.setAttr1(response.getRetmsg()+","+response.getException());
             resp.setRetcode(response.getRetcode().toString());
             resp.setRetmsg(response.getRetmsg());
-            return resp;
-        }else{
-            CitizenCardPayfinishParam finishparam=new CitizenCardPayfinishParam();
-            finishparam.setRefno(response.getRefno());
-            CitizenPayResponse finishresp=payApiService.citizencardPayFinish(finishparam);
-            if(finishresp.getRetcode()!=0){
-                tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                transDtlService.saveTransdtl(tTransdtl);
-                resp.setRetcode(finishresp.getRetcode().toString());
-                resp.setRetmsg(finishresp.getRetmsg());
-                return resp;
-            }
         }
-
-        tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
-        //TODO:调核心平台初始化确认 逻辑缺！！！
-
-        transDtlService.saveTransdtl(tTransdtl);
         resp.setBillno(req.getBillno());
         Double retAmount=tTransdtl.getAmount()*100;
         resp.setAmount(retAmount.intValue());
-        resp.setExtraamt(extamount*100);
+        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())){
             resp.setRequire_query(true);
         }else{
             resp.setRequire_query(false);
         }
-        resp.setBalance(0);
-        resp.setRetcode(ErrorCode.ERRIF_OK);
         return resp;
     }
 
@@ -332,22 +333,24 @@
             resp.setRetmsg("交易参考号" + req.getBillno() + "不存在");
             return resp;
         }
-        TCustomer cus = customerService.getCustomerByCustid(tTransdtl.getCustid());
-        if (null == cus) {
-            resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
-            resp.setRetmsg("客户" + tTransdtl.getCustid() + "不存在");
-            return resp;
+
+        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())){
+            resp.setRequire_query(true);
+        }else{
+            resp.setRequire_query(false);
         }
-
         resp.setBillno(tTransdtl.getBillno());
-
         Double retAmount=tTransdtl.getAmount()*100;
         resp.setAmount(retAmount.intValue());
         Double retExtamt=tTransdtl.getManagefee()*100;
         resp.setExtraamt(retExtamt.intValue());
-        resp.setUserid(cus.getCustid());
-        resp.setUsername(cus.getCustname());
-        resp.setRequire_query(true); //TODO:改 什么时候成功
+        resp.setUserid(tTransdtl.getCustid());
+        resp.setUsername(tTransdtl.getCustname());
         resp.setBalance(0);
         resp.setRetcode(ErrorCode.ERRIF_OK);
         return resp;
@@ -364,8 +367,8 @@
         }
         if (!tTransDtl.getStatus().toUpperCase().equals(
                 RestaurantConstant.STATUS_TRANSDTL_SUCCESS.toUpperCase())) {
-            tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-            tTransDtl.setAttr1("交易状态未成功");
+           /* tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+            tTransDtl.setAttr1("交易状态未成功");*/
             resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
             resp.setRetmsg("流水" + req.getReversalbillno() + "交易状态未成功，不能冲正");
             return resp;
@@ -615,17 +618,24 @@
 
         TCard tCard = cardService.getCardByCardnoAndCardphyid(req.getCardno(), req.getCardphyid());
         if (null == tCard) {
-
             err+="卡号[" + req.getCardno() + "]不存在;";
+        }else{
+            TCustomer customer=customerService.getCustomerByCustid(tCard.getCustid());
+            if(null==customer){
+                err+="卡对应人员不存在;";
+            } else {
+                transDtl.setCustid(customer.getCustid());
+                transDtl.setCustname(customer.getCustname());
+            }
         }
 
-        TCustomer customer=customerService.getCustomerByCustid(tCard.getCustid());
+      /*  TCustomer customer=customerService.getCustomerByCustid(tCard.getCustid());
         if(null==customer){
             err+="卡对应人员不存在;";
         } else {
             transDtl.setCustid(customer.getCustid());
             transDtl.setCustname(customer.getCustname());
-        }
+        }*/
 
 
 
@@ -644,7 +654,7 @@
             }
         } catch (Exception e) {
             e.printStackTrace();
-            err+="设置餐补类型失败;";
+            err+="设置分餐失败;";
         }
 
         if("true".equals(req.getReversalflag())){
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 5267d8e..40ce54c 100644
--- a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
+++ b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
@@ -38,20 +38,7 @@
     @Autowired
     private CitizenCardPayProxy citizenCardPayProxy;
 
-  /*  @Scheduled(cron = "${cron.offlinedtl}")
-    private void configureTasks() {
-        List<TTransDtl> dtls=transDtlService.getSubmittingTransdtl();
-        if(dtls.size()>0){
-            logger.info("正在上传"+dtls.size()+"笔流水");
-            for(TTransDtl dtl:dtls){
-                dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
-                transDtlService.saveTransdtl(dtl);
-            }
-        }
-
-    }*/
-
-    @Scheduled(cron = "${cron.offlinedtl}")
+ /*   @Scheduled(cron = "${cron.offlinedtl}")
     private void submitOfflineDtlTask(){
         String date=DateUtil.getNow("yyyyMMdd");
         List<TOfflineTransDtl> dtls=offlineTransDtlService.getUncheckOfflineTransdtl(date);
@@ -70,7 +57,7 @@
                 CitizenPayResponse response=citizenCardPayProxy.citizencardPayinit(param);
                 if(response.getRetcode()!=0){
                     dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                    dtl.setAttr1(response.getRetmsg());
+                    dtl.setAttr1(response.getRetmsg()+","+ response.getException());
                     offlineTransDtlService.saveTransdtl(dtl);
                     logger.info(dtl.getBillno()+"初始化失败,"+response.getRetcode()+","+response.getRetmsg()+","+ response.getException());
                     continue;
@@ -80,7 +67,7 @@
                 CitizenPayResponse finishresp=citizenCardPayProxy.citizencardPayFinish(finishparam);
                 if(finishresp.getRetcode()!=0){
                     dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-                    dtl.setAttr1(response.getRetmsg());
+                    dtl.setAttr1(response.getRetmsg()+","+ response.getException());
                     offlineTransDtlService.saveTransdtl(dtl);
                     logger.info(dtl.getBillno()+"消费缺认失败,"+finishresp.getRetcode()+","+finishresp.getRetmsg()+","+ finishresp.getException());
                     continue;
@@ -91,6 +78,6 @@
 
         }
 
-    }
+    }*/
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java
index d77fdeb..4f63744 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/TransDtlSearchBean.java
@@ -9,8 +9,8 @@
     private String startdate;
     private String enddate;
     private Integer termid;
-    private Integer status;
-    private Integer shopid;
+    private String status;
+    private String shopid;
     private String accdate;
 
     public String getAccdate() {
@@ -61,19 +61,19 @@
         this.termid = termid;
     }
 
-    public Integer getStatus() {
+    public String getStatus() {
         return status;
     }
 
-    public void setStatus(Integer status) {
+    public void setStatus(String status) {
         this.status = status;
     }
 
-    public Integer getShopid() {
+    public String getShopid() {
         return shopid;
     }
 
-    public void setShopid(Integer shopid) {
+    public void setShopid(String shopid) {
         this.shopid = shopid;
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlController.java
index f3eb105..51a607c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlController.java
@@ -53,11 +53,11 @@
     public PageResult<TTransDtl> getDataList(@RequestParam("page") Integer pageNo,
                                              @RequestParam("limit") Integer pageSize,
                                              @RequestParam(value = "custname", required = false) String custname,
-                                             @RequestParam(value = "shopid", required = false) Integer shopid,
+                                             @RequestParam(value = "shopid", required = false) String shopid,
                                              @RequestParam(value = "startdate", required = false) String startdate,
                                              @RequestParam(value = "enddate", required = false) String enddate,
                                              @RequestParam(value = "billno", required = false) String billno,
-                                             @RequestParam(value = "status", required = false) Integer status,
+                                             @RequestParam(value = "status", required = false) String status,
                                              @RequestParam(value = "termid", required = false) Integer termid) {
         try {
             if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
@@ -76,11 +76,11 @@
     @RequestMapping("/export")
     @ResponseBody
     public JsonResult downloadfile(@RequestParam(value = "custname", required = false) String custname,
-                                   @RequestParam(value = "shopid", required = false) Integer shopid,
+                                   @RequestParam(value = "shopid", required = false) String shopid,
                                    @RequestParam(value = "startdate", required = false) String startdate,
                                    @RequestParam(value = "enddate", required = false) String enddate,
                                    @RequestParam(value = "billno", required = false) String billno,
-                                   @RequestParam(value = "status", required = false) Integer status,
+                                   @RequestParam(value = "status", required = false) String status,
                                    @RequestParam(value = "termid", required = false) Integer termid,
                                    HttpServletRequest request, HttpServletResponse response) {
 
@@ -89,7 +89,7 @@
         return transDtlService.export(bean, request, response);
     }
 
-    private TransDtlSearchBean getTransDtlSearchBean( String custname,  Integer shopid, String startdate, String enddate, String billno,Integer status, Integer termid) {
+    private TransDtlSearchBean getTransDtlSearchBean( String custname,  String shopid, String startdate, String enddate, String billno,String status, Integer termid) {
         TransDtlSearchBean bean = new TransDtlSearchBean();
         bean.setCustname(custname);
         bean.setEnddate(enddate);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
index 3ae9a10..7d4ff29 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
@@ -12,6 +12,7 @@
 import com.supwisdom.dlpay.restaurant.domain.TTransDtl;
 import com.supwisdom.dlpay.restaurant.service.ShopSettlementService;
 import com.supwisdom.dlpay.restaurant.service.TransDtlService;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
@@ -70,6 +71,7 @@
             }
             bean.setCustname(custname);
             bean.setBillno(refno);
+            bean.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
             bean.setPageNo(pageNo);
             bean.setPageSize(pageSize);
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java
index d1f234d..1136ace 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/CardDao.java
@@ -2,7 +2,6 @@
 
 
 import com.supwisdom.dlpay.restaurant.domain.TCard;
-import com.supwisdom.dlpay.restaurant.domain.TCardPk;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -13,14 +12,16 @@
 import java.util.List;
 
 @Repository
-public interface CardDao extends JpaRepository<TCard, TCardPk> {
+public interface CardDao extends JpaRepository<TCard, String> {
 
     @Query(value = "update TB_CARD set STATUS=:status where CARDNO=:cardno", nativeQuery = true)
     void updateStatus(@Param("cardno") Integer cardno,@Param("status") Integer status);
 
     List<TCard> findAllByCustid(String custid);
 
-    List<TCard> findAllByCardno(String cardno);
+    List<TCard> findAllByCardnoAndStatus(String cardno,String status);
 
     Integer countByCardno(String cardno);
+
+    List<TCard>  findAllByCardnoAndCardphyidAndStatus(String cardno,String cardphyid,String status);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaGroupDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaGroupDao.java
index 04033ee..d566f99 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaGroupDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaGroupDao.java
@@ -13,7 +13,9 @@
 
   TDevparaGroup findByGroupid(int groupid);
 
-  TDevparaGroup findByGlobalflag(Boolean t);
+
+  @Query(" from TDevparaGroup t where t.globalflag=true ")
+  TDevparaGroup findGlobalParaGroup();
 
   @Query("select count(t.groupid) from TDevparaGroup t where t.groupname=?1 ")
   long checkGroupnameExists(String groupname);
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 f2b60b6..cfb0ade 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
@@ -44,4 +44,5 @@
 
     TTransDtl getByTransdateAndTermidAndTermsqlno(String transdate,Integer termid,Integer termsqlno);
 
+    Integer countByAccdateAndCustidAndRuleid(String accdate,String custid,Integer ruleid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCard.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCard.java
index 14ec99a..a839940 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCard.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCard.java
@@ -4,7 +4,6 @@
 import javax.persistence.*;
 
 @Entity
-@IdClass(TCardPk.class)
 @Table(name = "TB_CARD")
 public class TCard {
     private String cardno;
@@ -28,7 +27,6 @@
     public void setCardno(String cardno) {
         this.cardno = cardno;
     }
-    @Id
     @Column(name = "cardphyid" ,nullable = false,length = 8)
     public String getCardphyid() {
         return cardphyid;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCardPk.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCardPk.java
deleted file mode 100644
index c9e8c1d..0000000
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TCardPk.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.supwisdom.dlpay.restaurant.domain;
-
-import javax.persistence.Column;
-import javax.persistence.Id;
-import java.io.Serializable;
-
-public class TCardPk implements Serializable {
-  @Id
-  @Column(name = "cardphyid", nullable = false, precision = 8)
-  private String cardphyid;
-
-  @Id
-  @Column(name = "CARDNO", nullable = false, length = 32)
-  private String cardno;
-
-  public TCardPk() {
-  }
-
-  public TCardPk(String cardphyid, String cardno) {
-    this.cardphyid = cardphyid;
-    this.cardno = cardno;
-  }
-
-
-  public String getCardphyid() {
-    return cardphyid;
-  }
-
-  public void setCardphyid(String cardphyid) {
-    this.cardphyid = cardphyid;
-  }
-
-  public String getCardno() {
-    return cardno;
-  }
-
-  public void setCardno(String cardno) {
-    this.cardno = cardno;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    TDevparaPk tDevparaPk = (TDevparaPk) o;
-    if (cardphyid != null ? !cardphyid.equals(tDevparaPk.getGroupid()) : cardphyid != null)
-      return false;
-    if (cardno != null ? !cardno.equals(tDevparaPk.getParaname()) : cardno != null)
-      return false;
-
-    return true;
-  }
-
-
-}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
index 47d613e..7ddd9cc 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
@@ -47,7 +47,7 @@
   TDiscountDevbind getDiscountDevbindById(String id);
 
   @Transactional(rollbackFor = Exception.class, readOnly = true)
-  DiscountBean getCustomerDiscount(Integer deviceid, String termtime);
+  DiscountBean getCustomerDiscount(Integer deviceid, String termtime,String custid);
 
   @Transactional(rollbackFor = Exception.class)
   boolean deleteDiscountDevbind(TDiscountDevbind bind);
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 adfcc0f..209d4d4 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
@@ -47,4 +47,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     List<TTransDtl> getSubmittingTransdtl();
+
+    @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/impl/CardServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CardServiceImpl.java
index baa5428..903a26f 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CardServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CardServiceImpl.java
@@ -4,7 +4,6 @@
 import com.supwisdom.dlpay.restaurant.dao.CardDao;
 import com.supwisdom.dlpay.restaurant.dao.CardverDao;
 import com.supwisdom.dlpay.restaurant.domain.TCard;
-import com.supwisdom.dlpay.restaurant.domain.TCardPk;
 import com.supwisdom.dlpay.restaurant.domain.TCardver;
 import com.supwisdom.dlpay.restaurant.service.CardService;
 import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
@@ -41,12 +40,11 @@
 
     @Override
     public TCard getCardByCardnoAndCardphyid(String cardno,String cardphyid) {
-        TCardPk pk=new TCardPk(cardphyid,cardno);
-        Optional<TCard> card=cardDao.findById(pk);
-        if(!card.isPresent()){
-            return null;
+        List<TCard> card=cardDao.findAllByCardnoAndCardphyidAndStatus(cardno,cardphyid,"normal");
+        if(card.size()>0){
+            return card.get(0);
         }
-        return card.get();
+        return null;
     }
 
     @Override
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 1d393e1..540dc9f 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
@@ -8,7 +8,6 @@
 import com.supwisdom.dlpay.restaurant.dao.CardverDao;
 import com.supwisdom.dlpay.restaurant.dao.CustomerDao;
 import com.supwisdom.dlpay.restaurant.domain.TCard;
-import com.supwisdom.dlpay.restaurant.domain.TCardPk;
 import com.supwisdom.dlpay.restaurant.domain.TCardver;
 import com.supwisdom.dlpay.restaurant.domain.TCustomer;
 import com.supwisdom.dlpay.restaurant.service.CardService;
@@ -17,9 +16,6 @@
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -56,11 +52,12 @@
     public PageResult<CustomerShowBean> getCustomerByCustname(CustomerSearchBean param) {
         StringBuffer querySql = new StringBuffer("select t.cardno,t.custid,c.custname, " +
                 "t.bankcardno,t.cardphyid,c.phone,c.custtype from Tb_card t " +
-                "left join tb_customer c on t.custid=c.custid ");
-        StringBuffer countSql = new StringBuffer("select count(*) as cnt from Tb_card t left join tb_customer c on t.custid=c.custid ");
+                "left join tb_customer c on t.custid=c.custid where t.status='normal'");
+        StringBuffer countSql = new StringBuffer("select count(*) as cnt from Tb_card t " +
+                "left join tb_customer c on t.custid=c.custid where t.status='normal'");
         if (!StringUtil.isEmpty(param.getCustname())) {
-            querySql.append(" where  c.custname like :str ");
-            countSql.append(" where  c.custname like :str ");
+            querySql.append(" and  c.custname like :str ");
+            countSql.append(" and  c.custname like :str ");
         }
         querySql.append(" order by t.cardno ");
         Query query = entityManager.createNativeQuery(querySql.toString());
@@ -79,8 +76,8 @@
 
     @Override
     public TCustomer getCustomerByCustid(String custid) {
-        Optional<TCustomer> cust=customerDao.findById(custid);
-        if(cust.isPresent()){
+        Optional<TCustomer> cust = customerDao.findById(custid);
+        if (cust.isPresent()) {
             return cust.get();
         }
         return null;
@@ -88,15 +85,18 @@
 
     @Override
     public JsonResult saveCustomer(CustomerSaveBean customer) {
-        if (StringUtil.isEmpty(customer.getCustid())) {
-            TCard card =
-                    cardService.getCardByCardnoAndCardphyid(customer.getCardno(), customer.getCardphyid());
-            if (null!=card) {
-                return JsonResult.error("用户" + customer.getCustname() + "已拥有该卡");
+        TCard card = new TCard();
+        TCustomer cus = new TCustomer();
+        if (!StringUtil.isEmpty(customer.getCustid())) {
+            Optional<TCustomer> opt1 = customerDao.findById(customer.getCustid());
+            if (opt1.isPresent()) {
+                cus = opt1.get();
+            }
+            List<TCard> cardlist=cardDao.findAllByCustid(customer.getCustid());
+            if(cardlist.size()>0){
+                card=cardlist.get(0);
             }
         }
-
-        TCustomer cus=new TCustomer();
         cus.setCusttype(customer.getCusttype());
         cus.setBatchno(customer.getBatchno());
         cus.setLastsaved(DateUtil.getNow("yyyyMMddHHmmss"));
@@ -109,17 +109,17 @@
         if (null != cus) {
             String cardverno = systemUtilService.getCardverno();
             String date = DateUtil.getNow("yyyyMMdd");
-            TCard card = new TCard();
+
             card.setCardno(customer.getCardno());
             card.setOpendate(date);
             card.setCustid(cus.getCustid());
-            card.setStatus("normal");
+            card.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
+            card.setTransstatus(RestaurantConstant.STATUS_CARD_NORMAL);
             card.setCardphyid(customer.getCardphyid());
             card.setCardverno(cardverno);
             card.setBankcardno(customer.getBankcardno());
             card.setExpiredate("");
-            card=cardDao.save(card);
-
+            card = cardDao.save(card);
             saveCardver(cardverno, date, card, card.getStatus(), RestaurantConstant.STATUS_CARD_NORMAL);
         }
 
@@ -148,7 +148,7 @@
         TCustomer customer = customerDao.findById(custid).get();
         String cardverno = systemUtilService.getCardverno();
         List<TCard> card = cardDao.findAllByCustid(custid);
-        for(TCard c:card){
+        for (TCard c : card) {
             c.setStatus(RestaurantConstant.STATUS_CARD_LOGOUT);
             c.setCardverno(cardverno);
             cardDao.save(c);
@@ -157,7 +157,6 @@
         }
 
 
-
         customerDao.deleteById(custid);
         return JsonResult.ok("成功");
     }
@@ -265,7 +264,7 @@
         return JsonResult.error("操作失败");
     }
 
-    private  List<CustomerExportBean> getCustomerExport() {
+    private List<CustomerExportBean> getCustomerExport() {
         StringBuffer querySql = new StringBuffer(
                 "select c.custname,c.phone,t.cardno,t.bankcardno from tb_card t left join tb_customer c on t.custid=c.custid");
 
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 e2f32ed..7e069e2 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
@@ -152,7 +152,7 @@
 
     private TCustomer getCustomerByCardno(String cardno) {
         if (!StringUtil.isEmpty(cardno)) {
-            TCard clst=cardDao.findAllByCardno(cardno).get(0);
+            TCard clst=cardDao.findAllByCardnoAndStatus(cardno,"normal").get(0);
             Optional<TCustomer> list = customerDao.findById(clst.getCustid());
             if (list.isPresent()) {
                 return list.get();
@@ -402,15 +402,17 @@
     }
 
     @Override
-    public DiscountBean getCustomerDiscount(Integer deviceid, String termtime) {
+    public DiscountBean getCustomerDiscount(Integer deviceid, String termtime,String custid) {
         StringBuffer sql = new StringBuffer("select d.limitcnt,d.ruletype,d.amount,d.ruleid from  tb_discount_rule d " +
                 "left join tb_discount_devbind t on t.ruleid=d.ruleid " +
                 "left join tb_discount_detail c on t.ruleid=c.ruleid " +
-                "where c.status='normal' and t.deviceid=:deviceid" +
-                "and d.starttime<:termtime and d.endtime>:termtime ");
+                "where c.status='normal' and t.deviceid=:deviceid " +
+                "and d.starttime<:termtime and d.endtime>:termtime " +
+                "and c.userid=:custid");
         Query query = entityManager.createNativeQuery(sql.toString());
         query.setParameter("deviceid", deviceid);
         query.setParameter("termtime", termtime);
+        query.setParameter("custid", custid);
         query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(DiscountBean.class));
         List<DiscountBean> list = query.getResultList();
         if(list.size()>0){
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceParamServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceParamServiceImpl.java
index 2c3e714..3a18889 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceParamServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceParamServiceImpl.java
@@ -26,6 +26,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 @Service
 public class DeviceParamServiceImpl implements DeviceParamService {
@@ -57,12 +58,16 @@
 
   @Override
   public TDevparaGroup getDevparaGroupByGroupid(int groupid) {
-    return devparaGroupDao.findByGroupid(groupid);
+    Optional<TDevparaGroup> opt= devparaGroupDao.findById(groupid);
+    if(opt.isPresent()){
+      return opt.get();
+    }
+    return null;
   }
 
   @Override
   public TDevparaGroup getDefaultDevparaGroup() {
-    return devparaGroupDao.findByGlobalflag(true);
+    return devparaGroupDao.findGlobalParaGroup();
   }
 
   @Override
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 06b5a37..714b0e9 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
@@ -1,10 +1,13 @@
 package com.supwisdom.dlpay.restaurant.service.impl;
 
+import com.supwisdom.dlpay.api.bean.ConsumePayCancelParam;
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.api.bean.PayReverseResponse;
 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.*;
+import com.supwisdom.dlpay.paysdk.proxy.TransactionProxy;
 import com.supwisdom.dlpay.restaurant.bean.AmountCountBean;
 import com.supwisdom.dlpay.restaurant.bean.ManageFeeAmtBean;
 import com.supwisdom.dlpay.restaurant.bean.SalesAmtBean;
@@ -43,7 +46,8 @@
     private ShopSettlementDao shopSettlementDao;
     @Autowired
     private SystemUtilService systemUtilService;
-
+    @Autowired
+    private TransactionProxy transactionProxy;
     @PersistenceContext
     private EntityManager entityManager;
 
@@ -168,9 +172,8 @@
         if(null==targetDtl){
             return JsonResult.error("未查询到目标流水");
         }
-        Integer otermsqlno=targetDtl.getTermsqlno();
+
         TTransDtl revDtl=new TTransDtl();
-        BeanUtils.copyProperties(targetDtl,revDtl);
         revDtl.setBillno(systemUtilService.getRefno());
         revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
         String date=DateUtil.getNow("yyyyMMdd");
@@ -179,15 +182,38 @@
         revDtl.setAcctime(time);
         revDtl.setTransdate(date);
         revDtl.setTranstime(time);
-        revDtl.setRevbillno(dtl.getBillno());
-        revDtl.setAttr1(dtl.getAttr1());
-        revDtl.setStatus(dtl.getStatus());
+        revDtl.setRevbillno(targetDtl.getBillno());
+        revDtl.setAttr1(targetDtl.getAttr1());
+        revDtl.setStatus(targetDtl.getStatus());
         revDtl.setTermsqlno(dtl.getTermsqlno());
+        revDtl.setTermid(targetDtl.getTermid());
+        revDtl.setShopid(targetDtl.getShopid());
+        revDtl.setMealtype(targetDtl.getMealtype());
+        revDtl.setManagefee(targetDtl.getManagefee());
+        revDtl.setRuleid(targetDtl.getRuleid());
+        revDtl.setCustid(targetDtl.getCustid());
+        revDtl.setCustname(targetDtl.getCustname());
+        revDtl.setCusttype(targetDtl.getCusttype());
         revDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_REVERT);
         revDtl.setAmount(targetDtl.getAmount()*-1.00);
         transDtlDao.save(revDtl);
+        ConsumePayCancelParam cancelParam=new ConsumePayCancelParam();
+        cancelParam.setBillno(revDtl.getBillno());
+        cancelParam.setRefno(targetDtl.getRefno());
+        cancelParam.setRequestbillno(targetDtl.getBillno());
+        cancelParam.setShopaccno(targetDtl.getShopid());
+        cancelParam.setTransdate(targetDtl.getTransdate());
+        cancelParam.setTranstime(targetDtl.getTranstime());
+        PayReverseResponse reverseResp=transactionProxy.payCancel(cancelParam);
+        if(reverseResp.getRetcode()!=0){
+            revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+
+
+        }
+        revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+        revDtl.setRefno(reverseResp.getRefno());
+        transDtlDao.save(revDtl);
         targetDtl.setRevflag(1);
-        targetDtl.setTermsqlno(otermsqlno);
         transDtlDao.save(targetDtl);
         return JsonResult.ok("操作成功");
     }
@@ -249,5 +275,10 @@
         return transDtlDao.findAllByStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
     }
 
+    @Override
+    public Integer getDiscountLimitToday(String termdate, String custid, Integer ruleid) {
+        return transDtlDao.countByAccdateAndCustidAndRuleid(termdate,custid,ruleid);
+    }
+
 
 }
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 5c28f58..1c184dd 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,6 +1,6 @@
-﻿INSERT INTO "tb_apiclient" (appid,roles,secret,status,thirdurl,bcrypt_secret) VALUES ('200001', 'ROLE_THIRD_SHOP;ROLE_THIRD_DEPOSIT;ROLE_THIRD_ADMIN;ROLE_THIRD_CONSUME;ROLE_THIRD_COMMON', 'dc1d26c0d43e442588092c8d45c21bce', 'normal', NULL, '$2a$10$Iaftjij0mOzWY3Yo3e83geMT2ExqsP4b84enC454xFoxP1rKDWl/e');
---INSERT INTO "tb_apiclient" (appid,roles,secret,status,thirdurl,bcrypt_secret) VALUES ('100001', 'ROLE_THIRD_ADMIN', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal', NULL, '$2a$10$dcHoUeXbjMJw7YV5UyW/PugQYBK3MlNudXuqfeciSn.sr1fYwEHTK');
+﻿--INSERT INTO "tb_apiclient" (appid,roles,secret,status,thirdurl,bcrypt_secret) VALUES ('100001', 'ROLE_THIRD_ADMIN', 'oUw2NmA09ficiVWD4TUQLDOkPyzQa3VzbjjsW0B2qTk=', 'normal', NULL, '$2a$10$dcHoUeXbjMJw7YV5UyW/PugQYBK3MlNudXuqfeciSn.sr1fYwEHTK');
 INSERT INTO "tb_apiclient" (appid,roles,secret,status,thirdurl,bcrypt_secret) VALUES ('3000004', 'ROLE_THIRD_SHOP;ROLE_THIRD_DEPOSIT;ROLE_THIRD_CONSUME', 'c9ae5b4fe5014b5b9eb19e1a0797a3a3', 'normal', NULL, '$2a$10$XvsC6sUyXhKhZvvfKK7.t.UVu8PuP5Mc5UdblLZzsVCtAsT6i2NBK');
+INSERT INTO "tb_apiclient" (appid,roles,secret,status,thirdurl,bcrypt_secret) VALUES ('200001', 'ROLE_THIRD_SHOP;ROLE_THIRD_DEPOSIT;ROLE_THIRD_ADMIN;ROLE_THIRD_CONSUME;ROLE_THIRD_COMMON', 'dc1d26c0d43e442588092c8d45c21bce', 'normal', NULL, '$2a$10$Iaftjij0mOzWY3Yo3e83geMT2ExqsP4b84enC454xFoxP1rKDWl/e');
 
 
 INSERT INTO "tb_devpara" (paraname,groupid,maxval,minval,paradesc,paraval,valtype) VALUES ('communicate_time', 1, '255', '0', '终端请求超时时间(单位:秒)', '3', 'N');
@@ -82,8 +82,10 @@
 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 ('0', 'transtatusList', '未入账', '流水状态');
-INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('1', 'transtatusList', '已入账', '流水状态');
+INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('normal', 'transtatusList', '成功', '流水状态');
+INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('fail', 'transtatusList', '失败', '流水状态');
+INSERT INTO "tb_dictionary"(dictval,dicttype,dictcaption,dicttypename) VALUES ('wit', 'transtatusList', '等待', '流水状态');
+
 
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (3, NULL, 0, NULL, 'layui-icon-set', '#', '系统中心', 2, -1);
 INSERT INTO "tb_function"(id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (5, NULL, 1, NULL, 'layui-icon-set', '/role/index', '角色管理', 2, 3);
@@ -110,9 +112,12 @@
 --INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (11, NULL, 1, NULL, 'layui-icon-util', '/param/syspara', '系统参数配置', 1, 10);
 INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (12, NULL, 1, NULL, 'layui-icon-util', '/param/businesspara', '业务参数配置', 2, 10);
 INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (17, NULL, 1, NULL, 'layui-icon-util', '/param/apiclientpara', '应用参数配置', 3, 10);
+--INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (2, NULL, 1, NULL, '', '/custmeallist/index', '就餐名单管理', 3, 22);
+--INSERT INTO "tb_function" (id,createtime,isleaf,lastsaved,menuicon,menuurl,name,ordernum,parentid) VALUES (7, NULL, 1, NULL, '', '/custmealcheck/index', '就餐名单审核', 4, 22);
+
 
 INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('dinner', '200000', '20190709102922', '晚餐');
-INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('lunch', '130000', '20190709102922', '中午');
+INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('lunch', '140000', '20190709102922', '中午');
 INSERT INTO "tb_mealtype" (mealtype,endtime,lastsaved,mealname) VALUES ('breakfast', '100000', '20190709102803', '早餐');
 INSERT INTO "tb_oper_role" (id,operid,roleid) VALUES ('2c9cab836a90185f016a901b005f001b', '402882816a8fe884016a8fe8c0530000', '2c9cab836a8af5d5016a8af6ece20000');
 INSERT INTO "tb_oper_role" (id,operid,roleid) VALUES ('ff8080816aaf2ec3016aaf30c1b60007', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
diff --git a/src/main/resources/templates/restaurant/discountrule/rule.html b/src/main/resources/templates/restaurant/discountrule/rule.html
index 1607c04..7d4706c 100644
--- a/src/main/resources/templates/restaurant/discountrule/rule.html
+++ b/src/main/resources/templates/restaurant/discountrule/rule.html
@@ -66,7 +66,10 @@
                         }
                     },
                     {
-                        field: 'amount', title: '金额(元)', align: 'center', sort: true, templet: function (d) {
+                        field: 'amount', title: '金额/折率', align: 'center', sort: true, templet: function (d) {
+                            if ('discount' == d.ruletype) {
+                                return d.amount + '折';
+                            }
                             return parseFloat(d.amount).toFixed(2);
                         }
                     },
diff --git a/src/main/resources/templates/restaurant/discountrule/rulecheck.html b/src/main/resources/templates/restaurant/discountrule/rulecheck.html
index df4bc99..8895539 100644
--- a/src/main/resources/templates/restaurant/discountrule/rulecheck.html
+++ b/src/main/resources/templates/restaurant/discountrule/rulecheck.html
@@ -69,7 +69,10 @@
                             }
                         },
                         {
-                            field: 'amount', title: '金额(元)', align: 'center', sort: true, templet: function (d) {
+                            field: 'amount', title: '金额/折率', align: 'center', sort: true, templet: function (d) {
+                                if ('discount' == d.ruletype) {
+                                    return d.amount + '折';
+                                }
                                 return parseFloat(d.amount).toFixed(2);
                             }
                         },
diff --git a/src/main/resources/templates/restaurant/discountrule/ruleform.html b/src/main/resources/templates/restaurant/discountrule/ruleform.html
index 7d50742..6abfe9c 100644
--- a/src/main/resources/templates/restaurant/discountrule/ruleform.html
+++ b/src/main/resources/templates/restaurant/discountrule/ruleform.html
@@ -2,9 +2,9 @@
     <div class="layui-form-item">
         <label class="layui-form-label">餐补类型</label>
         <div class="layui-input-block">
-            <input type="radio" name="ruletype" id="form-discountrule-ruletype-quota" lay-filter="discountrule-ruletype-filter" value="quota" title="定额" checked/>
+            <input type="radio" name="ruletype" id="form-discountrule-ruletype-discount" lay-filter="discountrule-ruletype-filter" value="discount" title="折扣" checked/>
+            <input type="radio" name="ruletype" id="form-discountrule-ruletype-quota" lay-filter="discountrule-ruletype-filter" value="quota" title="定额" />
             <input type="radio" name="ruletype" id="form-discountrule-ruletype-reduction" lay-filter="discountrule-ruletype-filter" value="reduction" title="减免"/>
-            <input type="radio" name="ruletype" id="form-discountrule-ruletype-discount" lay-filter="discountrule-ruletype-filter" value="discount" title="折扣"/>
 
         </div>
     </div>
@@ -31,7 +31,7 @@
     </div>
 
     <div class="layui-form-item">
-        <label class="layui-form-label" id="form-discountrule-amount-text"><span style="color: red">* </span>固定金额(元)</label>
+        <label class="layui-form-label" id="form-discountrule-amount-text"><span style="color: red">* </span>折率(折)</label>
         <div class="layui-input-block">
             <input type="text" name="amount" id="form-discountrule-amount" maxlength="9" autocomplete="off" style="width: 90%;"
                    class="layui-input" lay-verify="required|Amount"/>
@@ -73,6 +73,8 @@
         var laydate = layui.laydate;
         var upload = layui.upload;
 
+        var discountType='discount';
+
         laydate.render({
             elem: '#form-discountrule-starttime',
             type: 'time',
@@ -91,6 +93,9 @@
         form.verify({
             "Amount": function (e) {
                 if (null != e && e.length > 0 && !(/^\d+(\.)?(\.\d{1,2})?$/.test(e))) {
+                    if(discountType=='discount'){
+                        return "请输入1~9的数字";
+                    }
                     return "请正确输入金额(单位：元，最多两位小数)";
                 }
             },
@@ -124,6 +129,7 @@
         });
         form.on('radio(discountrule-ruletype-filter)', function (data) {
             changeDiscountRuletype(data.value);
+            discountType=data.value;
         });
 
         var changeDiscountRuletype = function (val) {
diff --git a/src/main/resources/templates/restaurant/transdtl/index.html b/src/main/resources/templates/restaurant/transdtl/index.html
index 555d218..c60bc72 100644
--- a/src/main/resources/templates/restaurant/transdtl/index.html
+++ b/src/main/resources/templates/restaurant/transdtl/index.html
@@ -129,7 +129,7 @@
             cols: [
                 [
                     {field: 'custname', title: '姓名',width:100, fixed: 'left'},
-                    {field: 'cardno', title: '市民卡号', fixed: 'left'},
+                    {field: 'cardno', title: '市民卡号',width:100, fixed: 'left'},
                     {field: 'billno', title: '交易号', fixed: 'left',width:200, sort: true},
                     {field: 'amount', title: '交易金额', sort: true,
                         templet: function (item) {
@@ -149,6 +149,19 @@
                         }
                     },
                     {
+                        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,
@@ -161,10 +174,24 @@
                             return '';
                         }
                     },
-                    {field: 'termid', title: '终端号', sort: true},
+                    {
+                        field: 'transtime',
+                        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',
                         title: '商户',
+                        width:100,
                         align: 'center',
                         templet: function (item) {
                             return shoplist[item.shopid];
@@ -173,6 +200,7 @@
                     {
                         field: 'status',
                         title: '流水状态',
+                        width:100,
                         align: 'center',
                         templet: function (item) {
                             return getTempDictValue('transtatusList',item.status);
@@ -181,6 +209,7 @@
                     {
                         field: 'transtype',
                         title: '流水类型',
+                        width:100,
                         sort: true,
                         align: 'center',
                         templet: function (item) {
diff --git a/src/main/resources/templates/restaurant/transdtlrev/index.html b/src/main/resources/templates/restaurant/transdtlrev/index.html
index 6b2d2c0..564d973 100644
--- a/src/main/resources/templates/restaurant/transdtlrev/index.html
+++ b/src/main/resources/templates/restaurant/transdtlrev/index.html
@@ -79,7 +79,8 @@
             cols: [
                 [
                     {field: 'custname', title: '姓名', fixed: 'left'},
-                    {field: 'refno', title: '交易号', fixed: 'left', sort: true},
+                    {field: 'billno', title: '交易号', fixed: 'left', sort: true},
+                    {field: 'refno', title: '平台交易号', fixed: 'left', sort: true},
                     {field: 'amount', title: '交易金额', sort: true,
                         templet: function (item) {
                            return numberFormat(item.amount,2);
diff --git a/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java b/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
index 43bc906..b6e3c5f 100644
--- a/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
+++ b/src/test/kotlin/com/supwisdom/dlpay/controller/PosPayServiceTest.java
@@ -1,13 +1,12 @@
 package com.supwisdom.dlpay.controller;
 
 
-import com.supwisdom.dlpay.api.bean.ApiVersionResponse;
-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.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 org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -42,6 +41,12 @@
     @Autowired
     private ApiLoginProxy apiLoginProxy;
 
+    @Autowired
+    private UserProxy userProxy;
+
+    @Autowired
+    private ShopProxy shopProxy;
+
     private String appid="200001";
 
     private String secret="dc1d26c0d43e442588092c8d45c21bce";
@@ -80,4 +85,20 @@
 
     }
 
+
+    @org.junit.Test
+    public void OpenAccount() {
+        ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+        helper.login(appid, secret);
+        OpenUserParam param=new OpenUserParam();
+        param.setUid("12344321");
+        param.setName("张三");
+        param.setIdtype("1");
+        param.setIdno("310101199999999999");
+        UserResponse payInit = userProxy.openAccount(param);
+        assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
+                payInit.getRetcode(), equalTo(0));
+
+
+    }
 }
