tcard表结构修改,消费逻辑加上餐补,交易流水添加refno,添加折扣餐补,
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));
+
+
+    }
 }