消费规则添加按月按次
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 2953097..5a3bb0c 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
@@ -171,18 +171,18 @@
cardno = req.getCardno();
}
- TBusinesspara ignoreflag=businessparaDao.findByParakey("customer.ignore");
- if(null!=(ignoreflag)&&"true".equalsIgnoreCase(ignoreflag.getParaval())){
- tCard = cardService.getCardByCardno(cardno);
- customer=customerService.getCustomerByCardno(cardno);
- if(null==tCard||null==customer){
- logger.info("用户未在用户表中");
- QueryUserParam param=new QueryUserParam();
- param.setCitizencardno(cardno);
- UserInforResponse usrresp=userProxy.querybycardno(param);
+ TBusinesspara ignoreflag = businessparaDao.findByParakey("customer.ignore");
+ if (null != (ignoreflag) && "true".equalsIgnoreCase(ignoreflag.getParaval())) {
+ tCard = cardService.getCardByCardno(cardno);
+ customer = customerService.getCustomerByCardno(cardno);
+ if (null == tCard || null == customer) {
+ logger.info("用户未在用户表中");
+ QueryUserParam param = new QueryUserParam();
+ param.setCitizencardno(cardno);
+ UserInforResponse usrresp = userProxy.querybycardno(param);
- logger.info(usrresp.getRetcode()+"|||"+usrresp.getRetmsg());
- if(usrresp.getRetcode()==0){
+ logger.info(usrresp.getRetcode() + "|||" + usrresp.getRetmsg());
+ if (usrresp.getRetcode() == 0) {
/*CustomerSaveBean customer=new CustomerSaveBean();
customer.setCusttype(2);
@@ -197,57 +197,57 @@
customer.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
customer.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_NORMAL);
customerService.saveCustomer(customer);*/
- customer=new TCustomer();
- customer.setCusttype(2);
- customer.setLastsaved(DateUtil.getNow("yyyyMMddHHmmss"));
- customer.setPhone(usrresp.getPhone());
- customer.setCustname(usrresp.getUsername());
- customer.setIdno(usrresp.getIdno());
- customer.setIdtype(usrresp.getIdtype());
- customer.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
- customer.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_NORMAL);
+ customer = new TCustomer();
+ customer.setCusttype(2);
+ customer.setLastsaved(DateUtil.getNow("yyyyMMddHHmmss"));
+ customer.setPhone(usrresp.getPhone());
+ customer.setCustname(usrresp.getUsername());
+ customer.setIdno(usrresp.getIdno());
+ customer.setIdtype(usrresp.getIdtype());
+ customer.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
+ customer.setCheckstatus(RestaurantConstant.STATUS_CHECKSTATUS_NORMAL);
- customer = customerDao.save(customer);
- if(null!=customer){
- String cardverno = systemUtilService.getCardverno();
- tCard=new TCard();
- tCard.setCardno(cardno);
- tCard.setOpendate(DateUtil.getNow("yyyyMMdd"));
- tCard.setCustid(customer.getCustid());
- tCard.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
- tCard.setTransstatus(RestaurantConstant.STATUS_CARD_NORMAL);
- if(null!=usrresp.getCardphyid()){
- tCard.setCardphyid(usrresp.getCardphyid());
- }
- tCard.setCardverno(cardverno);
- tCard.setBankcardno(usrresp.getBankcardno());
- tCard.setExpiredate(usrresp.getExpiredate());
- tCard = cardDao.save(tCard);
-
- TCardver tCardver = new TCardver();
- tCardver.setAccdate(DateUtil.getNow("yyyyMMdd"));
- tCardver.setCardno(tCard.getCardno());
- tCardver.setCardphyid(tCard.getCardphyid());
- tCardver.setAdderflag(1);
- tCardver.setOptype(RestaurantConstant.OPTYPE_CARD_OPEN);
- tCardver.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
- tCardver.setCustid(tCard.getCustid());
- tCardver.setCreatetime(DateUtil.getNow("yyyyMMddHHmmss"));
- tCardver.setCardverno(cardverno);
- cardverDao.save(tCardver);
- }else{
- resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
- resp.setRetmsg("保存客户出错");
- return resp;
+ customer = customerDao.save(customer);
+ if (null != customer) {
+ String cardverno = systemUtilService.getCardverno();
+ tCard = new TCard();
+ tCard.setCardno(cardno);
+ tCard.setOpendate(DateUtil.getNow("yyyyMMdd"));
+ tCard.setCustid(customer.getCustid());
+ tCard.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
+ tCard.setTransstatus(RestaurantConstant.STATUS_CARD_NORMAL);
+ if (null != usrresp.getCardphyid()) {
+ tCard.setCardphyid(usrresp.getCardphyid());
}
+ tCard.setCardverno(cardverno);
+ tCard.setBankcardno(usrresp.getBankcardno());
+ tCard.setExpiredate(usrresp.getExpiredate());
+ tCard = cardDao.save(tCard);
- }else{
+ TCardver tCardver = new TCardver();
+ tCardver.setAccdate(DateUtil.getNow("yyyyMMdd"));
+ tCardver.setCardno(tCard.getCardno());
+ tCardver.setCardphyid(tCard.getCardphyid());
+ tCardver.setAdderflag(1);
+ tCardver.setOptype(RestaurantConstant.OPTYPE_CARD_OPEN);
+ tCardver.setStatus(RestaurantConstant.STATUS_CARD_NORMAL);
+ tCardver.setCustid(tCard.getCustid());
+ tCardver.setCreatetime(DateUtil.getNow("yyyyMMddHHmmss"));
+ tCardver.setCardverno(cardverno);
+ cardverDao.save(tCardver);
+ } else {
resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
- resp.setRetmsg("卡号[" + cardno + "]未在核心平台查询到");
+ resp.setRetmsg("保存客户出错");
return resp;
}
+
+ } else {
+ resp.setRetcode(ErrorCode.ERRIF_CARD_NOTEXIST);
+ resp.setRetmsg("卡号[" + cardno + "]未在核心平台查询到");
+ return resp;
}
- }else{
+ }
+ } else {
tCard = cardService.getCardByCardno(cardno);
if (null == tCard) {
@@ -345,23 +345,47 @@
}
private Double getDiscountAmount(String termdate, String custid, Double amount, DiscountBean bean) {
- Integer limit;
- if(RestaurantConstant.RULEMODE_MONTH.equals(bean.getRulemode())){
- limit=transDtlService.getDiscountLimitMonth(termdate.substring(0,6),custid,bean.getRuleid());
- }else{
- limit=transDtlService.getDiscountLimitToday(termdate,custid,bean.getRuleid());
- }
-
- if (bean.getLimitcnt() > limit) {
-
- if (RestaurantConstant.RULETYPE_REDUCTION.equals(bean.getRuletype())) {
- amount = amount - bean.getAmount();
- } else if (RestaurantConstant.RULETYPE_DISCOUNT.equals(bean.getRuletype())) {
- amount = amount * (bean.getAmount() / 10);
- } else if (RestaurantConstant.RULETYPE_QUOTA.equals(bean.getRuletype())) {
- BigDecimal amt = BigDecimal.valueOf(bean.getAmount());
- amount = amt.doubleValue();
+ Integer discount_cnt;
+ Integer limit = bean.getLimitcnt();
+ boolean monthflag = RestaurantConstant.RULEMODE_MONTH.equals(bean.getRulemode());
+ try {
+ if (monthflag) {
+ logger.info("按月计费");
+ discount_cnt = transDtlService.getDiscountLimitMonth(termdate.substring(0, 6), custid, bean.getRuleid());
+ } else {
+ discount_cnt = transDtlService.getDiscountLimitToday(termdate, custid, bean.getRuleid());
}
+
+ if (limit > discount_cnt) {
+ if (monthflag) {
+ TBusinesspara cntflag = businessparaDao.findByParakey("discounttime.month");
+ Integer i = 0;
+ if (null != cntflag) {
+ String value = cntflag.getParaval();
+ if (!StringUtil.isEmpty(value)) {
+ i = Integer.parseInt(value);
+ }
+ }
+ if (i > 0) {
+ Integer daycnt=transDtlService.getDiscountLimitTodayWithPeriod(termdate,custid,bean.getRuleid(),bean.getStarttime(),bean.getEndtime());
+ if(daycnt>=i){
+ return amount;
+ }
+ }
+ }
+
+ if (RestaurantConstant.RULETYPE_REDUCTION.equals(bean.getRuletype())) {
+ amount = amount - bean.getAmount();
+ } else if (RestaurantConstant.RULETYPE_DISCOUNT.equals(bean.getRuletype())) {
+ amount = amount * (bean.getAmount() / 10);
+ } else if (RestaurantConstant.RULETYPE_QUOTA.equals(bean.getRuletype())) {
+ BigDecimal amt = BigDecimal.valueOf(bean.getAmount());
+ amount = amt.doubleValue();
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return amount;
}
return amount;
}
@@ -392,16 +416,18 @@
return resp;
}
Double amount = req.getAmount() / 100.0;
- Double cntamount=0.0;
- logger.info("交易号:"+tTransdtl.getBillno()+",,,交易金额:"+req.getAmount());
+ Double cntamount = 0.0;
+ logger.info("交易号:" + tTransdtl.getBillno() + ",,,交易金额:" + req.getAmount());
DiscountBean bean = deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(), req.getTermtime(), cus.getCustid());
if (null != bean) {
- tTransdtl.setRuleid(bean.getRuleid());
cntamount = getDiscountAmount(req.getTermdate(), cus.getCustid(), amount, bean);
- tTransdtl.setManagefee(amount-cntamount);
+ if(cntamount!=amount){
+ tTransdtl.setRuleid(bean.getRuleid());
+ }
+ tTransdtl.setManagefee(amount - cntamount);
tTransdtl.setManagefeetype(bean.getRuletype());
tTransdtl.setAmount(cntamount);
- }else{
+ } else {
tTransdtl.setManagefeetype(RestaurantConstant.RULETYPE_NORMAL);
tTransdtl.setAmount(amount);
tTransdtl.setManagefee(cntamount);
@@ -414,10 +440,10 @@
} else {
group = deviceParamService.getDevparaGroupByGroupid(bind.getGroupid());
}
- TDevpara para=deviceParamService.getDevparaInfoByParaname(group.getGroupid(),"once_limit_amt");
- if(null!=para||StringUtil.isEmpty(para.getParaval())){
- Double oncelimit=Double.parseDouble(para.getParaval())/100;
- if(amount>oncelimit&&cntamount>oncelimit){
+ TDevpara para = deviceParamService.getDevparaInfoByParaname(group.getGroupid(), "once_limit_amt");
+ if (null != para || StringUtil.isEmpty(para.getParaval())) {
+ Double oncelimit = Double.parseDouble(para.getParaval()) / 100;
+ if (amount > oncelimit && cntamount > oncelimit) {
resp.setRetcode("99");
resp.setRetmsg("消费金额超出单笔消费限额");
return resp;
@@ -836,8 +862,8 @@
cardno = qrcoderesp.getCitycardno();
cardphyid = qrcoderesp.getCardphyid();
} else {
- cardno="";
- cardphyid="";
+ cardno = "";
+ cardphyid = "";
}
} else {
cardno = req.getCardno();
@@ -856,8 +882,11 @@
transDtl.setCustname(customer.getCustname());
DiscountBean bean = deviceDiscountRuleService.getCustomerDiscount(device.getId(), req.getTranstime(), customer.getCustid());
if (null != bean) {
- transDtl.setRuleid(bean.getRuleid());
- amount = getDiscountAmount(req.getTransdate(), customer.getCustid(), amount, bean);
+
+ Double discountedamt = getDiscountAmount(req.getTransdate(), customer.getCustid(), amount, bean);
+ if(discountedamt!=amount){
+ transDtl.setRuleid(bean.getRuleid());
+ }
}
}
}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java
index 3b5ad3e..20ae7a9 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountBean.java
@@ -7,17 +7,21 @@
private Double amount;
private Integer ruleid;
private String rulemode;
+ private String starttime;
+ private String endtime;
public DiscountBean(){
}
- public DiscountBean(String ruletype, Integer limitcnt, Double amount, Integer ruleid, String rulemode) {
+ public DiscountBean(String ruletype, Integer limitcnt, Double amount, Integer ruleid, String rulemode, String starttime, String endtime) {
this.ruletype = ruletype;
this.limitcnt = limitcnt;
this.amount = amount;
this.ruleid = ruleid;
this.rulemode = rulemode;
+ this.starttime = starttime;
+ this.endtime = endtime;
}
public Integer getRuleid() {
@@ -59,4 +63,20 @@
public void setRulemode(String rulemode) {
this.rulemode = rulemode;
}
+
+ public String getStarttime() {
+ return starttime;
+ }
+
+ public void setStarttime(String starttime) {
+ this.starttime = starttime;
+ }
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
}
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 5df3122..45981ec 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/TransDtlDao.java
@@ -49,9 +49,19 @@
Integer countByAccdateAndCustidAndRuleid(String accdate,String custid,Integer ruleid);
- @Query(value = "select count(refno) from tb_transdtl where substr(accdate,1,6)=?1 and custid=?2 and ruleid=?3",nativeQuery = true)
+ @Query(value = "select count(refno) from tb_transdtl where substr(accdate,1,6)=?1" +
+ " and custid=?2 and ruleid=?3",nativeQuery = true)
Integer countTrandtlByAccdateAndCustidAndRuleidWithMonth(String accdate,String custid,Integer ruleid);
+ @Query(value = "select count(refno) from tb_transdtl where substr(accdate,1,6)=?1" +
+ " and custid=?2 and ruleid=?3 and substr(acctime,1,4) BETWEEN ?4 and ?5",nativeQuery = true)
+ Integer countTrandtlByAccdateAndCustidAndRuleidWithMonthAndPeriod(String accdate,String custid,Integer ruleid,String starttime,String endtime);
+
+ @Query(value = "select count(refno) from tb_transdtl where accdate=?1" +
+ " and custid=?2 and ruleid=?3 and substr(acctime,1,4) BETWEEN ?4 and ?5",nativeQuery = true)
+ Integer countTrandtlByAccdateAndCustidAndRuleidWithPeriod(String accdate,String custid,Integer ruleid,String starttime,String endtime);
+
+
@Query("select min(accdate) from TTransDtl")
String getMinTransdate();
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 35e48fd..af06e93 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
@@ -55,5 +55,11 @@
Integer getDiscountLimitToday(String termdate,String custid,Integer ruleid);
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+ Integer getDiscountLimitTodayWithPeriod(String termdate,String custid,Integer ruleid,String starttime,String endtime);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
Integer getDiscountLimitMonth(String termdate,String custid,Integer ruleid);
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+ Integer getDiscountLimitMonthWithPeriod(String termdate,String custid,Integer ruleid,String starttime,String endtime);
}
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 d0098f2..7d6a6db 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
@@ -400,7 +400,7 @@
@Override
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 " +
+ StringBuffer sql = new StringBuffer("select d.limitcnt,d.ruletype,d.amount,d.ruleid,d.starttime,d.endtime,d.rulemode 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 d.status='normal' and t.deviceid=:deviceid " +
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 a8731bc..00c5ad9 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
@@ -300,9 +300,19 @@
}
@Override
+ public Integer getDiscountLimitTodayWithPeriod(String termdate, String custid, Integer ruleid, String starttime, String endtime) {
+ return transDtlDao.countTrandtlByAccdateAndCustidAndRuleidWithPeriod(termdate,custid,ruleid,starttime,endtime);
+ }
+
+ @Override
public Integer getDiscountLimitMonth(String termdate, String custid, Integer ruleid) {
return transDtlDao.countTrandtlByAccdateAndCustidAndRuleidWithMonth(termdate,custid,ruleid);
}
+ @Override
+ public Integer getDiscountLimitMonthWithPeriod(String termdate, String custid, Integer ruleid, String starttime, String endtime) {
+ return transDtlDao.countTrandtlByAccdateAndCustidAndRuleidWithMonthAndPeriod(termdate,custid,ruleid,starttime,endtime);
+ }
+
}
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 6d69446..aafc754 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -511,6 +511,7 @@
INSERT INTO "tb_businesspara" (parakey,paraval) VALUES ('payapi.appid', '200001');
INSERT INTO "tb_businesspara" (parakey,paraval) VALUES ('payapi.secret', 'dc1d26c0d43e442588092c8d45c21bce');
INSERT INTO "tb_businesspara" (parakey,paraval) VALUES ('customer.ignore', 'false');
+INSERT INTO "tb_businesspara" (parakey,paraval) VALUES ('discounttime.month', '0');
CREATE SEQUENCE SEQ_REFNO