第三方车载功能提交
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 7d42137..680db82 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
@@ -531,7 +531,6 @@
@Override
public PosPayReverseResp doPayCancel(PosPayReverseReq req) {
PosPayReverseResp resp = new PosPayReverseResp();
- System.out.println("termsqlno:" + req.getTermseqno());
TTransDtl tTransDtl = transDtlService.getTransDtlByBillno(req.getReversalbillno());
if (null == tTransDtl) {
resp.setRetcode(ErrorCode.ERRIF_OK);
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BaseThirdpartReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BaseThirdpartReq.java
new file mode 100644
index 0000000..a84a4a4
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BaseThirdpartReq.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BaseThirdpartReq {
+ private String partner_id;
+ private String version;
+ private String timestamp;
+ private String sign;
+ private String sign_method;
+
+ public String getPartner_id() {
+ return partner_id;
+ }
+
+ public void setPartner_id(String partner_id) {
+ this.partner_id = partner_id;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
+ public String getSign_method() {
+ return sign_method;
+ }
+
+ public void setSign_method(String sign_method) {
+ this.sign_method = sign_method;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartPayReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartPayReq.java
new file mode 100644
index 0000000..2b29717
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartPayReq.java
@@ -0,0 +1,77 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusThirdpartPayReq extends BaseThirdpartReq {
+ private String cardno;
+ private String tac;
+ private String billno;
+ private String transdate;
+ private String transtime;
+ private String termdesc;
+ private String extdata;
+ private Integer amount;
+
+
+ public String getCardno() {
+ return cardno;
+ }
+
+ public void setCardno(String cardno) {
+ this.cardno = cardno;
+ }
+
+ public String getTac() {
+ return tac;
+ }
+
+ public void setTac(String tac) {
+ this.tac = tac;
+ }
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+
+ public String getTransdate() {
+ return transdate;
+ }
+
+ public void setTransdate(String transdate) {
+ this.transdate = transdate;
+ }
+
+ public String getTranstime() {
+ return transtime;
+ }
+
+ public void setTranstime(String transtime) {
+ this.transtime = transtime;
+ }
+
+ public String getTermdesc() {
+ return termdesc;
+ }
+
+ public void setTermdesc(String termdesc) {
+ this.termdesc = termdesc;
+ }
+
+ public String getExtdata() {
+ return extdata;
+ }
+
+ public void setExtdata(String extdata) {
+ this.extdata = extdata;
+ }
+
+ public Integer getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Integer amount) {
+ this.amount = amount;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartPayResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartPayResp.java
new file mode 100644
index 0000000..a48be7d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartPayResp.java
@@ -0,0 +1,62 @@
+package com.supwisdom.dlpay.bus.bean;
+
+import java.util.List;
+
+public class BusThirdpartPayResp extends BusApiResp {
+ private String refno;
+ private String billno;
+ private String amount;
+ private String status;
+ private String accdate;
+ private String extdata;
+
+
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+
+ public String getAmount() {
+ return amount;
+ }
+
+ public void setAmount(String amount) {
+ this.amount = amount;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getAccdate() {
+ return accdate;
+ }
+
+ public void setAccdate(String accdate) {
+ this.accdate = accdate;
+ }
+
+ public String getExtdata() {
+ return extdata;
+ }
+
+ public void setExtdata(String extdata) {
+ this.extdata = extdata;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartQueryReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartQueryReq.java
new file mode 100644
index 0000000..6186c69
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartQueryReq.java
@@ -0,0 +1,23 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusThirdpartQueryReq extends BaseThirdpartReq {
+ private String refno;
+ private String billno;
+
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartQueryResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartQueryResp.java
new file mode 100644
index 0000000..a836ffb
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartQueryResp.java
@@ -0,0 +1,60 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusThirdpartQueryResp extends BusApiResp {
+ private String refno;
+ private String billno;
+ private String amount;
+ private String status;
+ private String accdate;
+ private String extdata;
+
+
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+
+ public String getAmount() {
+ return amount;
+ }
+
+ public void setAmount(String amount) {
+ this.amount = amount;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getAccdate() {
+ return accdate;
+ }
+
+ public void setAccdate(String accdate) {
+ this.accdate = accdate;
+ }
+
+ public String getExtdata() {
+ return extdata;
+ }
+
+ public void setExtdata(String extdata) {
+ this.extdata = extdata;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartRefundReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartRefundReq.java
new file mode 100644
index 0000000..64ac123
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartRefundReq.java
@@ -0,0 +1,51 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusThirdpartRefundReq extends BaseThirdpartReq {
+ private String billno;
+ private String orgrefno;
+ private String orgbillno;
+ private String transdate;
+ private String transtime;
+
+
+ public String getOrgrefno() {
+ return orgrefno;
+ }
+
+ public void setOrgrefno(String orgrefno) {
+ this.orgrefno = orgrefno;
+ }
+
+ public String getOrgbillno() {
+ return orgbillno;
+ }
+
+ public void setOrgbillno(String orgbillno) {
+ this.orgbillno = orgbillno;
+ }
+
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+
+ public String getTransdate() {
+ return transdate;
+ }
+
+ public void setTransdate(String transdate) {
+ this.transdate = transdate;
+ }
+
+ public String getTranstime() {
+ return transtime;
+ }
+
+ public void setTranstime(String transtime) {
+ this.transtime = transtime;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartRefundResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartRefundResp.java
new file mode 100644
index 0000000..bd724dc
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusThirdpartRefundResp.java
@@ -0,0 +1,51 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusThirdpartRefundResp extends BusApiResp {
+ private String refno;
+ private String billno;
+ private String refundamount;
+ private String refundstatus;
+ private String accdate;
+
+
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getBillno() {
+ return billno;
+ }
+
+ public void setBillno(String billno) {
+ this.billno = billno;
+ }
+
+ public String getRefundamount() {
+ return refundamount;
+ }
+
+ public void setRefundamount(String refundamount) {
+ this.refundamount = refundamount;
+ }
+
+ public String getRefundstatus() {
+ return refundstatus;
+ }
+
+ public void setRefundstatus(String refundstatus) {
+ this.refundstatus = refundstatus;
+ }
+
+ public String getAccdate() {
+ return accdate;
+ }
+
+ public void setAccdate(String accdate) {
+ this.accdate = accdate;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/controller/BusThirdpartConsumeController.java b/src/main/java/com/supwisdom/dlpay/bus/controller/BusThirdpartConsumeController.java
new file mode 100644
index 0000000..d3ccda0
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/controller/BusThirdpartConsumeController.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.bus.controller;
+
+import com.supwisdom.dlpay.bus.bean.*;
+import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import com.supwisdom.dlpay.bus.service.ThirdpartService;
+import com.supwisdom.dlpay.bus.util.MapSetUtil;
+import com.supwisdom.dlpay.bus.util.MapSort;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/thirdpart")
+public class BusThirdpartConsumeController {
+ @Autowired
+ private BusConsumeService busConsumeService;
+ @Autowired
+ private ThirdpartService thirdpartService;
+
+ private static final Logger logger = LoggerFactory.getLogger(BusThirdpartConsumeController.class);
+
+ @PostMapping("/pay")
+ public BusThirdpartPayResp thirdpartBusPay(@ModelAttribute BusThirdpartPayReq param) {
+
+ return thirdpartService.thirdpartBusPay(param);
+ }
+
+ @PostMapping("/query")
+ public BusBlacklistResp thirdpartQuery(@ModelAttribute BusBlacklistReq req) {
+ return busConsumeService.doGetBlacklist(req);
+ }
+
+ @PostMapping("/refund")
+ public BusDtlUploadResp uploadBusdtl(@ModelAttribute BusdtlUploadReq req) {
+ return busConsumeService.saveOfflineDtl(req);
+ }
+
+ //营业额查询
+ @RequestMapping(value = "/getbilldata", method = RequestMethod.POST)
+ @ResponseBody
+ public BusQuerysalesResp getBilldata(@ModelAttribute BusSysparaReq req) {
+ return busConsumeService.busQuerySales(req);
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
index 73bfad1..688abb9 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
@@ -9,4 +9,6 @@
@Repository
public interface OnlineBusdtlDao extends JpaRepository<TOnlineBusdtl, String> {
List<TOnlineBusdtl> findAllByTransdateAndStatus(String transdate,String status);
+
+ TOnlineBusdtl findByRefnoOrBillno(String refno,String billno);
}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
index 725a339..aef4e2e 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
@@ -29,4 +29,8 @@
List<TOfflineBusdtl> getUncheckOfflineTransdtl(String transdate);
List<TOnlineBusdtl> getSubmittingOnlineTransdtl(String transdate);
+
+
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ BusThirdpartRefundResp doBusRefund(BusThirdpartRefundReq req);
}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/ThirdpartService.java b/src/main/java/com/supwisdom/dlpay/bus/service/ThirdpartService.java
new file mode 100644
index 0000000..93f382b
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/ThirdpartService.java
@@ -0,0 +1,18 @@
+package com.supwisdom.dlpay.bus.service;
+
+import com.supwisdom.dlpay.api.bean.CitizenPayResponse;
+import com.supwisdom.dlpay.bus.bean.*;
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
+
+public interface ThirdpartService {
+ BusThirdpartPayResp thirdpartBusPay(BusThirdpartPayReq param);
+
+ BusThirdpartQueryResp thirdpartBusQuery(BusThirdpartQueryReq param);
+
+ BusThirdpartRefundResp doThirdpartRefund(BusThirdpartRefundReq param);
+
+ TOnlineBusdtl doSetOnlineBusdtl(TOfflineBusdtl dtl);
+
+ void saveFailTransdtls(TOfflineBusdtl dtl, TOnlineBusdtl tTransDtl, CitizenPayResponse finishresp);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
index 712677c..98a15a2 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
@@ -1,6 +1,8 @@
package com.supwisdom.dlpay.bus.service.impl;
+import com.supwisdom.dlpay.api.bean.ConsumePayCancelParam;
import com.supwisdom.dlpay.api.bean.DevparaBean;
+import com.supwisdom.dlpay.api.bean.PayReverseResponse;
import com.supwisdom.dlpay.api.service.impl.PosPayServiceImpl;
import com.supwisdom.dlpay.api.util.ErrorCode;
import com.supwisdom.dlpay.bus.bean.*;
@@ -21,19 +23,27 @@
import com.supwisdom.dlpay.framework.domain.TSyspara;
import com.supwisdom.dlpay.framework.service.SystemUtilService;
import com.supwisdom.dlpay.framework.util.DateUtil;
+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.paysdk.proxy.UserProxy;
+import com.supwisdom.dlpay.restaurant.bean.AmountCountBean;
import com.supwisdom.dlpay.restaurant.bean.ManageFeeAmtBean;
import com.supwisdom.dlpay.restaurant.bean.SalesAmtBean;
import com.supwisdom.dlpay.restaurant.dao.*;
import com.supwisdom.dlpay.restaurant.domain.*;
import com.supwisdom.dlpay.restaurant.service.*;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
import java.util.ArrayList;
import java.util.List;
@@ -61,11 +71,14 @@
private DeviceParamService deviceParamService;
@Autowired
private ShopSettlementService shopSettlementService;
-
@Autowired
private CitizenCardDao cardDao;
@Autowired
private CitizenCardverDao cardverDao;
+ @Autowired
+ private TransactionProxy transactionProxy;
+ @PersistenceContext
+ private EntityManager entityManager;
@Override
@@ -304,6 +317,8 @@
return resp;
}
+
+
@Override
public BusQuerysalesResp busQuerySales(BusSysparaReq req) {
BusQuerysalesResp resp = new BusQuerysalesResp();
@@ -315,7 +330,7 @@
return resp;
}
- SalesAmtBean salesAmtBean = transDtlService.getSalesToday(req.getTermdate(), device.getId());
+ SalesAmtBean salesAmtBean = getBusSalesToday(req.getTermdate(), device.getId());
// ManageFeeAmtBean feeAmtBean = transDtlService.getManageFeeToday(req.getTermdate(), device.getId());
@@ -346,6 +361,83 @@
return onlineBusdtlDao.findAllByTransdateAndStatus(transdate,BusConstant.STATUS_WAIT);
}
+ @Override
+ public BusThirdpartRefundResp doBusRefund(BusThirdpartRefundReq req) {
+ BusThirdpartRefundResp resp = new BusThirdpartRefundResp();
+ TOnlineBusdtl tTransDtl = onlineBusdtlDao.findByRefnoOrBillno(req.getOrgrefno(),req.getOrgbillno());
+ if (null == tTransDtl) {
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ resp.setRetmsg("交易参考号" + req.getOrgbillno() + "不存在");
+ return resp;
+ }
+ if (!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.toUpperCase().equals(tTransDtl.getStatus().toUpperCase())) {
+ /* tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+ tTransDtl.setAttr1("交易状态未成功");*/
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ resp.setRetmsg("流水" + req.getOrgbillno() + "交易状态未成功,不能冲正");
+ return resp;
+ }
+ if (tTransDtl.getRevflag() == 1) {
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ resp.setRetmsg("流水" + req.getOrgbillno() + "已冲正");
+ return resp;
+ }
+ try {
+
+ TOnlineBusdtl revDtl=new TOnlineBusdtl();
+ revDtl.setBillno(req.getBillno());
+ String date=DateUtil.getNow("yyyyMMdd");
+ String time=DateUtil.getNow("HHmmss");
+ revDtl.setTransdate(date);
+ revDtl.setTranstime(time);
+ revDtl.setStatus(tTransDtl.getStatus());
+ revDtl.setTermid(tTransDtl.getTermid());
+ revDtl.setMerchaccno(tTransDtl.getMerchaccno());
+
+ revDtl.setPayerid(tTransDtl.getPayerid());
+ revDtl.setCardno(tTransDtl.getCardno());
+ revDtl.setPayername(tTransDtl.getPayername());
+ revDtl.setTranstype(BusConstant.TRANSTYPE_TRANSDTL_REVERT);
+ revDtl.setAmount(tTransDtl.getAmount()*-1.00);
+ ConsumePayCancelParam cancelParam=new ConsumePayCancelParam();
+ cancelParam.setRefno(tTransDtl.getRefno());
+ cancelParam.setRequestbillno(revDtl.getBillno());
+ cancelParam.setTransdate(revDtl.getTransdate());
+ cancelParam.setTranstime(revDtl.getTranstime());
+ PayReverseResponse reverseResp=transactionProxy.payCancel(cancelParam);
+
+ if(reverseResp.getRetcode()!=0){
+ revDtl.setStatus(BusConstant.STATUS_TRANSDTL_FAIL);
+ revDtl.setRemark(reverseResp.getRetmsg()+","+reverseResp.getException());
+ onlineBusdtlDao.save(revDtl);
+ resp.setRetcode(BusConstant.BUS_THIRDPART_CONSUME_ERROR);
+ resp.setRetmsg("冲正失败"+revDtl.getRemark());
+ return resp;
+ }
+ revDtl.setStatus(BusConstant.STATUS_TRANSDTL_SUCCESS);
+ revDtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
+ revDtl.setAccdate(date);
+ revDtl.setRefno(reverseResp.getRefno());
+ onlineBusdtlDao.save(revDtl);
+ tTransDtl.setRevflag(1);
+ onlineBusdtlDao.save(tTransDtl);
+ resp.setRetmsg("冲正成功");
+ resp.setRetcode(BusConstant.STATUS_TRANSDTL_SUCCESS);
+ resp.setRefno(revDtl.getRefno());
+ resp.setAccdate(date);
+ resp.setRefundamount(tTransDtl.getAmount().toString());
+ resp.setRefundstatus(revDtl.getStatus());
+ resp.setBillno(revDtl.getBillno());
+
+ return resp;
+ } catch (Exception e) {
+ e.printStackTrace();
+ resp.setRetcode(ErrorCode.ERRIF_TRANS_REVERSED);
+ resp.setRetmsg("冲正失败,错误:" + e.getMessage());
+ return resp;
+ }
+ }
+
private BusApiResp checkDevice(BusApiResp resp, TDevice device) {
if (null == device) {
@@ -366,4 +458,24 @@
resp.setRetcode(ErrorCode.ERRIF_OK);
return resp;
}
+
+ private SalesAmtBean getBusSalesToday(String transdate, Integer termid) {
+ StringBuffer querySql = new StringBuffer("select sum(amount) as totalamt,count(billno) as totalcnt " +
+ "from tb_onlinebusdtl where transdate=:transdate and termid=:termid and status=:stat ");
+
+ Query query = entityManager.createNativeQuery(querySql.toString());
+ query.setParameter("transdate", transdate);
+ query.setParameter("termid", termid);
+ query.setParameter("stat", RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+ query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(AmountCountBean.class));
+ List<AmountCountBean> list = query.getResultList();
+ if (!StringUtil.isEmpty(list)) {
+ AmountCountBean acb = list.get(0);
+ SalesAmtBean bean = new SalesAmtBean();
+ bean.setSalescnt(acb.getTotalcnt().longValue());
+ bean.setSalesamt(acb.getTotalamt() == null ? 0 : Math.round(acb.getTotalamt() * 100));
+ return bean;
+ }
+ return new SalesAmtBean(0L, 0L);
+ }
}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/ThirdpartServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/ThirdpartServiceImpl.java
new file mode 100644
index 0000000..5d786bc
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/ThirdpartServiceImpl.java
@@ -0,0 +1,505 @@
+package com.supwisdom.dlpay.bus.service.impl;
+
+import com.supwisdom.dlpay.api.bean.*;
+import com.supwisdom.dlpay.api.util.ErrorCode;
+import com.supwisdom.dlpay.bus.bean.*;
+import com.supwisdom.dlpay.bus.dao.CitizenCardDao;
+import com.supwisdom.dlpay.bus.dao.OfflineBusdtlDao;
+import com.supwisdom.dlpay.bus.dao.OnlineBusdtlDao;
+import com.supwisdom.dlpay.bus.domain.TCitizenCard;
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
+import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import com.supwisdom.dlpay.bus.service.ThirdpartService;
+import com.supwisdom.dlpay.bus.util.BusConstant;
+import com.supwisdom.dlpay.framework.domain.TApiClient;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.HmacUtil;
+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.dao.CardDao;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import com.supwisdom.dlpay.system.service.ParamService;
+import org.jetbrains.annotations.Contract;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import rx.internal.operators.BackpressureUtils;
+
+import java.util.HashMap;
+
+
+@Service
+public class ThirdpartServiceImpl implements ThirdpartService {
+
+ @Autowired
+ private ParamService paramService;
+ @Autowired
+ private SystemUtilService systemUtilService;
+ @Autowired
+ private CitizenCardDao citizenCardDao;
+ @Autowired
+ private OfflineBusdtlDao offlineBusdtlDao;
+ @Autowired
+ private CitizenCardPayProxy citizenCardPayProxy;
+ @Autowired
+ private OnlineBusdtlDao onlineBusdtlDao;
+ @Autowired
+ private TransactionProxy transactionProxy;
+ @Autowired
+ private BusConsumeService busConsumeService;
+
+ private static final Logger logger = LoggerFactory.getLogger(ThirdpartServiceImpl.class);
+
+
+ @Override
+ public BusThirdpartPayResp thirdpartBusPay(BusThirdpartPayReq req) {
+ BusThirdpartPayResp resp =new BusThirdpartPayResp();
+ resp=checkPayParam(req,resp);
+
+ if(!StringUtil.isEmpty(resp.getRetcode())||!StringUtil.isEmpty(resp.getRetmsg())){
+ return resp;
+ }
+
+ TApiClient client =paramService.getApiClientByAppid(req.getPartner_id());
+ if(null==client){
+ resp.setRetmsg("partner_id错误或未添加");
+ resp.setRetcode(BusConstant.BUS_THIRDPART_SIGNMETHODERR);
+ return resp;
+ }
+ String key=client.getSecret();
+ //签名验证
+ HashMap<String,String> map=new HashMap<>();
+ map.put("billno",req.getBillno());
+ map.put("cardno",req.getCardno());
+ map.put("partner_id",req.getPartner_id());
+ map.put("sign_method",req.getSign_method());
+ map.put("tac",req.getTac());
+ map.put("timestamp",req.getTimestamp());
+ map.put("transdate",req.getTransdate());
+ map.put("transtime",req.getTranstime());
+ map.put("version",req.getVersion());
+ String signstr=StringUtil.createLinkString(map);
+
+ boolean signbol=busVerifySign(key,signstr,req.getSign(),req.getSign_method());
+ if(!signbol){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_WRONGSIGN);
+ resp.setRetmsg("签名错误");
+ return resp;
+ }
+
+ TOfflineBusdtl transDtl = new TOfflineBusdtl();
+ transDtl.setTransdate(req.getTransdate());
+ transDtl.setTranstime(req.getTranstime());
+ transDtl.setBillno(req.getBillno());
+ transDtl.setCardno(req.getCardno());
+ transDtl.setCollecttime(systemUtilService.getSysdatetime().getHostdatetime());
+ transDtl.setCardno(req.getCardno());
+ transDtl.setTranstime(req.getTranstime());
+ transDtl.setTransdate(req.getTransdate());
+ transDtl.setAmount(req.getAmount() / 100.0);
+ transDtl.setDtltype("card");
+ transDtl.setDtlstat(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+ transDtl.setQrcode("");
+ transDtl.setRemark("第三方车载");
+
+ TCitizenCard tCard = citizenCardDao.findByCardno(req.getCardno());
+ if (null == tCard) {
+ transDtl.setErrcode(BusConstant.BUS_OFFLINE_NOUSER);
+ transDtl.setErrmsg("卡号不存在");
+
+ offlineBusdtlDao.save(transDtl);
+ resp.setRetmsg("保存成功");
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ return resp;
+ }
+ transDtl.setPayerid(tCard.getPayerid());
+ transDtl.setCardphyid(tCard.getCardphyid());
+ transDtl.setPayername(tCard.getUsername());
+
+/* TDevice device = deviceService.getDeviceByDevphyid(req.getDevphyid());
+ if (null == device) {
+ transDtl.setErrcode(BusConstant.BUS_OFFLINE_NODEVICE);
+ transDtl.setErrmsg("设备物理ID不存在");
+
+ offlineBusdtlDao.save(transDtl);
+ resp.setRetmsg("保存成功");
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ return resp;
+ }
+ if (1 != device.getState()) {
+ transDtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
+ transDtl.setErrmsg("设备状态异常");
+ offlineBusdtlDao.save(transDtl);
+ resp.setRetmsg("保存成功");
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ return resp;
+ }
+ if (!BusConstant.STATUS_NORMAL.equals(device.getCheckstatus())) {
+ transDtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
+ transDtl.setErrmsg("设备审核未通过");
+ offlineBusdtlDao.save(transDtl);
+ resp.setRetmsg("保存成功");
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ return resp;
+ }
+
+ transDtl.setTermid(device.getId());
+ transDtl.setDevphyid(device.getDevphyid());*/
+ transDtl.setMerchaccno(req.getPartner_id());
+
+ transDtl.setStatus(BusConstant.STATUS_INIT);
+
+
+ TOnlineBusdtl onlineBusdtl = doSetOnlineBusdtl(transDtl);
+
+ CitizenCardPayinitParam param = new CitizenCardPayinitParam();
+ param.setBillno(transDtl.getBillno());
+ param.setShopaccno(transDtl.getMerchaccno());
+ param.setTransdate(transDtl.getTransdate());
+ param.setTranstime(transDtl.getTranstime());
+ param.setCardNo(transDtl.getCardno());
+ param.setDtltype("carbus");
+ Double amt = transDtl.getAmount() * 100;
+ param.setAmount(amt.intValue());
+
+ CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
+ if (response.getRetcode() != 0) {
+ saveFailTransdtls(transDtl, onlineBusdtl, response);
+ logger.error(transDtl.getBillno() + "初始化失败," + response.getRetcode() + "," + response.getRetmsg() + "," + response.getException());
+
+ resp.setRetcode(response.getRetcode().toString());
+ resp.setRetmsg(response.getRetmsg());
+ return resp;
+
+ }
+ CitizenCardPayfinishParam finishparam = new CitizenCardPayfinishParam();
+ finishparam.setRefno(response.getRefno());
+ CitizenPayResponse finishresp = citizenCardPayProxy.citizencardPayFinish(finishparam);
+ if (finishresp.getRetcode() != 0) {
+ saveFailTransdtls(transDtl, onlineBusdtl, finishresp);
+ logger.error(transDtl.getBillno() + "消费确认失败," + finishresp.getRetcode() + "," + finishresp.getRetmsg() + "," + finishresp.getException());
+
+ resp.setRetmsg(finishresp.getRetmsg());
+ resp.setRetcode(finishresp.getRetcode().toString());
+ return resp;
+ }
+ String date = DateUtil.getNow("yyyyMMdd");
+ onlineBusdtl.setAccdate(date);
+ onlineBusdtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
+ onlineBusdtl.setCoreStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+ onlineBusdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+ onlineBusdtl.setRefno(response.getRefno());
+ transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+ busConsumeService.saveOfflineBusdtlAndOnlinedtl(transDtl,onlineBusdtl);
+
+
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ resp.setRetmsg("保存成功");
+ resp.setAmount(req.getAmount().toString());
+ resp.setAccdate(req.getTransdate());
+ resp.setStatus(BusConstant.STATUS_TRANSDTL_SUCCESS);
+ resp.setRefno(response.getRefno());
+ resp.setBillno(req.getBillno());
+ return resp;
+ }
+
+ @Override
+ public BusThirdpartQueryResp thirdpartBusQuery(BusThirdpartQueryReq req) {
+
+ BusThirdpartQueryResp resp = new BusThirdpartQueryResp();
+ resp=checkQueryParam(req,resp);
+
+
+ TApiClient client =paramService.getApiClientByAppid(req.getPartner_id());
+ if(null==client){
+ resp.setRetmsg("partner_id错误或未添加");
+ resp.setRetcode(BusConstant.BUS_THIRDPART_SIGNMETHODERR);
+ return resp;
+ }
+ String key=client.getSecret();
+ //签名验证
+ HashMap<String,String> map=new HashMap<>();
+ map.put("billno",req.getBillno());
+ map.put("refno",req.getRefno());
+ map.put("sign_method",req.getSign_method());
+ map.put("timestamp",req.getTimestamp());
+ map.put("version",req.getVersion());
+ String signstr=StringUtil.createLinkString(map);
+
+ boolean signbol=busVerifySign(key,signstr,req.getSign(),req.getSign_method());
+ if(!signbol){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_WRONGSIGN);
+ resp.setRetmsg("签名错误");
+ return resp;
+ }
+
+ TOnlineBusdtl tTransdtl = onlineBusdtlDao.findByRefnoOrBillno(req.getRefno(),req.getBillno());
+ if (null == tTransdtl) {
+ resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
+ resp.setRetmsg("交易参考号" + req.getBillno() + "不存在");
+ return resp;
+ }
+
+ QueryDtlResultParam param = new QueryDtlResultParam();
+ param.setRefno(tTransdtl.getRefno());
+ param.setBillno(tTransdtl.getBillno());
+ param.setShopaccno(tTransdtl.getMerchaccno());
+ QueryTransDtlResponse queryresp = transactionProxy.queryDtlResult(param);
+
+ resp.setBillno(tTransdtl.getBillno());
+ resp.setRefno(queryresp.getOutTradeNo());
+ Double retAmount = queryresp.getAmount() * 100;
+ resp.setAmount(retAmount.toString());
+ resp.setStatus(queryresp.getStatus());
+ resp.setAccdate(tTransdtl.getAccdate());
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ resp.setRetmsg("查询成功");
+ return resp;
+ }
+
+ @Override
+ public BusThirdpartRefundResp doThirdpartRefund(BusThirdpartRefundReq req) {
+ BusThirdpartRefundResp resp=new BusThirdpartRefundResp();
+ resp=checkRefundParam(req,resp);
+
+ if(!StringUtil.isEmpty(resp.getRetcode())||!StringUtil.isEmpty(resp.getRetmsg())){
+ return resp;
+ }
+
+ TApiClient client =paramService.getApiClientByAppid(req.getPartner_id());
+ if(null==client){
+ resp.setRetmsg("partner_id错误或未添加");
+ resp.setRetcode(BusConstant.BUS_THIRDPART_SIGNMETHODERR);
+ return resp;
+ }
+ String key=client.getSecret();
+ //签名验证
+ HashMap<String,String> map=new HashMap<>();
+ map.put("billno",req.getBillno());
+ if(!StringUtil.isEmpty(req.getOrgbillno())){
+ map.put("orgBillno",req.getOrgbillno());
+ }else{
+ map.put("orgRefno",req.getOrgrefno());
+ }
+
+ map.put("partner_id",req.getPartner_id());
+ map.put("sign_method",req.getSign_method());
+ map.put("timestamp",req.getTimestamp());
+ map.put("transdate",req.getTransdate());
+ map.put("transtime",req.getTranstime());
+ map.put("version",req.getVersion());
+ String signstr=StringUtil.createLinkString(map);
+
+ boolean signbol=busVerifySign(key,signstr,req.getSign(),req.getSign_method());
+ if(!signbol){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_WRONGSIGN);
+ resp.setRetmsg("签名错误");
+ return resp;
+ }
+
+ return busConsumeService.doBusRefund(req);
+ }
+
+
+ private static BusThirdpartPayResp checkPayParam(BusThirdpartPayReq payReq,BusThirdpartPayResp payResp){
+ BusApiResp busApiResp=checkBaseParam(payReq,payResp);
+
+ if(null!=busApiResp.getRetcode()||null!=busApiResp.getRetmsg()){
+ payResp.setRetcode(busApiResp.getRetcode());
+ payResp.setRetmsg(busApiResp.getRetmsg());
+ return payResp;
+
+ }
+
+ if(StringUtil.isEmpty(payReq.getBillno())){
+ payResp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ payResp.setRetmsg("第三方流水号为空");
+ return payResp;
+ }
+ if(StringUtil.isEmpty(payReq.getCardno())){
+ payResp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ payResp.setRetmsg("卡号为空");
+ return payResp;
+ }
+ if(StringUtil.isEmpty(payReq.getTac())){
+ payResp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ payResp.setRetmsg("校验串为空");
+ return payResp;
+ }
+ if(StringUtil.isEmpty(payReq.getTransdate())){
+ payResp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ payResp.setRetmsg("交易日期为空");
+ return payResp;
+ }
+ if(StringUtil.isEmpty(payReq.getTranstime())){
+ payResp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ payResp.setRetmsg("交易时间为空");
+ return payResp;
+ }
+ if(null==payReq.getAmount()){
+ payResp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ payResp.setRetmsg("交易金额为空");
+ return payResp;
+ }
+ if(payReq.getAmount()<=0){
+ payResp.setRetcode(BusConstant.BUS_THIRDPART_AMOUNTERR);
+ payResp.setRetmsg("交易金额不得小于0");
+ return payResp;
+ }
+ return payResp;
+
+ }
+
+ private static BusThirdpartQueryResp checkQueryParam(BusThirdpartQueryReq req,BusThirdpartQueryResp resp){
+ BusApiResp busApiResp=checkBaseParam(req,resp);
+ if(null!=busApiResp.getRetcode()||null!=busApiResp.getRetmsg()){
+ resp.setRetcode(busApiResp.getRetcode());
+ resp.setRetmsg(busApiResp.getRetmsg());
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getBillno())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("第三方流水号为空");
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getRefno())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("核心平台流水号为空");
+ return resp;
+ }
+
+ return resp;
+
+ }
+
+ private static BusThirdpartRefundResp checkRefundParam(BusThirdpartRefundReq req,BusThirdpartRefundResp resp){
+ BusApiResp busApiResp=checkBaseParam(req,resp);
+ if(null!=busApiResp.getRetcode()||null!=busApiResp.getRetmsg()){
+ resp.setRetcode(busApiResp.getRetcode());
+ resp.setRetmsg(busApiResp.getRetmsg());
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getBillno())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("第三方流水号为空");
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getOrgbillno())&&StringUtil.isEmpty(req.getOrgrefno())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("冲正流水号和冲正核心平台流水号需至少有一个");
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getTransdate())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("交易日期为空");
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getTranstime())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("交易时间为空");
+ return resp;
+ }
+
+ return resp;
+ }
+
+ private static BusApiResp checkBaseParam(BaseThirdpartReq req, BusApiResp resp){
+
+ if(StringUtil.isEmpty(req.getPartner_id())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("partnerid为空");
+ return resp;
+ }
+
+
+ if(StringUtil.isEmpty(req.getVersion())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("version为空");
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getSign())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("sign为空");
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getSign_method())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("签名方法为空");
+ return resp;
+ }
+ if(BusConstant.BUS_THIRDPART_SIGNMETHOD.equals(req.getSign_method())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_SIGNMETHODERR);
+ resp.setRetmsg("签名方法不支持");
+ return resp;
+ }
+ if(StringUtil.isEmpty(req.getTimestamp())){
+ resp.setRetcode(BusConstant.BUS_THIRDPART_NOPARAM);
+ resp.setRetmsg("时间戳为空");
+ return resp;
+ }
+ return resp;
+
+ }
+
+ private static boolean busVerifySign(String key,
+ String signdata, String nSign, String nSignmethod) {
+
+
+ signdata = signdata.replaceAll("null", "");//清除空值
+
+ String mysign = "";
+ if ("HMAC".equals(nSignmethod)) {
+ mysign = HmacUtil.HMACSHA1(signdata, key);
+ }
+ if (null != mysign && !"".equals(mysign) && nSign.equalsIgnoreCase(mysign)) {
+ return true;
+ }
+ return false;
+ }
+
+ public TOnlineBusdtl doSetOnlineBusdtl(TOfflineBusdtl dtl) {
+ TOnlineBusdtl tTransDtl = new TOnlineBusdtl();
+ tTransDtl.setManagefee(dtl.getManagefee());
+ tTransDtl.setAmount(dtl.getAmount());
+ tTransDtl.setCardno(dtl.getCardno());
+ tTransDtl.setStatus(dtl.getStatus());
+ tTransDtl.setPayerid(dtl.getPayerid());
+ tTransDtl.setBillno(dtl.getBillno());
+ tTransDtl.setTermseqno(dtl.getTermseqno());
+ tTransDtl.setMerchaccno(dtl.getMerchaccno());
+ tTransDtl.setTransdate(dtl.getTransdate());
+ tTransDtl.setTranstime(dtl.getTranstime());
+ tTransDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
+ tTransDtl.setTransmode("card");
+ tTransDtl.setPayername(dtl.getPayername());
+ tTransDtl.setTermid(dtl.getTermid());
+ tTransDtl.setTransdate(dtl.getTransdate());
+ tTransDtl.setTranstime(dtl.getTranstime());
+ tTransDtl.setTranstype("none");
+ tTransDtl.setRevflag(0);
+ tTransDtl.setManagefee(dtl.getManagefee());
+ return tTransDtl;
+ }
+
+ public void saveFailTransdtls(TOfflineBusdtl dtl, TOnlineBusdtl tTransDtl, CitizenPayResponse finishresp) {
+ String status;
+ String attr;
+ if(RestaurantConstant.TRANSDTL_STATUS_WIT==finishresp.getRetcode()){
+ status=RestaurantConstant.STATUS_TRANSDTL_WAIT;
+ attr="";
+ tTransDtl.setRefno(finishresp.getRefno());
+ }else{
+ status=RestaurantConstant.STATUS_TRANSDTL_FAIL;
+ attr=finishresp.getRetmsg() + "," + finishresp.getException()+","+finishresp.getRetcode();
+ }
+ dtl.setStatus(status);
+ dtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
+ dtl.setErrmsg(attr);
+ tTransDtl.setStatus(status);
+ busConsumeService.saveOfflineBusdtlAndOnlinedtl(dtl,tTransDtl);
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java b/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java
index 0151c06..235277a 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/task/BusPayTask.java
@@ -6,6 +6,7 @@
import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import com.supwisdom.dlpay.bus.service.ThirdpartService;
import com.supwisdom.dlpay.bus.util.BusConstant;
import com.supwisdom.dlpay.framework.service.SystemUtilService;
import com.supwisdom.dlpay.framework.util.DateUtil;
@@ -34,7 +35,7 @@
@Autowired
- private TransDtlService transDtlService;
+ private ThirdpartService thirdpartService;
@Autowired
private OnlineBusdtlDao onlineBusdtlDao;
@Autowired
@@ -54,7 +55,7 @@
if (dtls.size() > 0) {
for (TOfflineBusdtl dtl : dtls) {
- TOnlineBusdtl tTransDtl = gettTransDtl(dtl);
+ TOnlineBusdtl tTransDtl = thirdpartService.doSetOnlineBusdtl(dtl);
CitizenCardPayinitParam param = new CitizenCardPayinitParam();
param.setBillno(dtl.getBillno());
@@ -68,7 +69,7 @@
CitizenPayResponse response = citizenCardPayProxy.citizencardPayinit(param);
if (response.getRetcode() != 0) {
- saveFailTransdtls(dtl, tTransDtl, response);
+ thirdpartService.saveFailTransdtls(dtl, tTransDtl, response);
logger.error(dtl.getBillno() + "初始化失败," + response.getRetcode() + "," + response.getRetmsg() + "," + response.getException());
continue;
}
@@ -76,7 +77,7 @@
finishparam.setRefno(response.getRefno());
CitizenPayResponse finishresp = citizenCardPayProxy.citizencardPayFinish(finishparam);
if (finishresp.getRetcode() != 0) {
- saveFailTransdtls(dtl, tTransDtl, finishresp);
+ thirdpartService.saveFailTransdtls(dtl, tTransDtl, finishresp);
logger.error(dtl.getBillno() + "消费确认失败," + finishresp.getRetcode() + "," + finishresp.getRetmsg() + "," + finishresp.getException());
continue;
}
@@ -91,47 +92,6 @@
}
}
- private TOnlineBusdtl gettTransDtl(TOfflineBusdtl dtl) {
- TOnlineBusdtl tTransDtl = new TOnlineBusdtl();
- tTransDtl.setManagefee(dtl.getManagefee());
- tTransDtl.setAmount(dtl.getAmount());
- tTransDtl.setCardno(dtl.getCardno());
- tTransDtl.setStatus(dtl.getStatus());
- tTransDtl.setPayerid(dtl.getPayerid());
- tTransDtl.setBillno(dtl.getBillno());
- tTransDtl.setTermseqno(dtl.getTermseqno());
- tTransDtl.setMerchaccno(dtl.getMerchaccno());
- tTransDtl.setTransdate(dtl.getTransdate());
- tTransDtl.setTranstime(dtl.getTranstime());
- tTransDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
- tTransDtl.setTransmode("card");
- tTransDtl.setPayername(dtl.getPayername());
- tTransDtl.setTermid(dtl.getTermid());
- tTransDtl.setTransdate(dtl.getTransdate());
- tTransDtl.setTranstime(dtl.getTranstime());
- tTransDtl.setTranstype("none");
- tTransDtl.setRevflag(0);
- tTransDtl.setManagefee(dtl.getManagefee());
- return tTransDtl;
- }
-
- private void saveFailTransdtls(TOfflineBusdtl dtl, TOnlineBusdtl tTransDtl, CitizenPayResponse finishresp) {
- String status;
- String attr;
- if(RestaurantConstant.TRANSDTL_STATUS_WIT==finishresp.getRetcode()){
- status=RestaurantConstant.STATUS_TRANSDTL_WAIT;
- attr="";
- tTransDtl.setRefno(finishresp.getRefno());
- }else{
- status=RestaurantConstant.STATUS_TRANSDTL_FAIL;
- attr=finishresp.getRetmsg() + "," + finishresp.getException()+","+finishresp.getRetcode();
- }
- dtl.setStatus(status);
- dtl.setErrcode(BusConstant.BUS_OFFLINE_DEVICEERROR);
- dtl.setErrmsg(attr);
- tTransDtl.setStatus(status);
- busConsumeService.saveOfflineBusdtlAndOnlinedtl(dtl,tTransDtl);
- }
@Scheduled(cron = "0 0/2 * * * ?")
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
index ea512b7..da255ac 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
@@ -42,4 +42,20 @@
public final static String BUS_OFFLINE_NOUSER = "12";
public final static String BUS_OFFLINE_DEVICEERROR = "13";
+
+ public final static String BUS_THIRDPART_NOPARAM = "11";
+ public final static String BUS_THIRDPART_AMOUNTERR = "12";
+ public final static String BUS_THIRDPART_SIGNMETHODERR = "13";
+ public final static String BUS_THIRDPART_WRONGSIGN = "304";
+ public final static String BUS_THIRDPART_CONSUME_ERROR = "99";
+
+ public final static String BUS_THIRDPART_SIGNMETHOD = "HMAC";
+
+ public static final String STATUS_TRANSDTL_INIT = "init"; //初始化
+ public static final String STATUS_TRANSDTL_WAIT = "wip"; //提交中
+ public static final String STATUS_TRANSDTL_SUCCESS = "success"; //已入账
+ public static final String STATUS_TRANSDTL_FAIL = "fail"; //取消
+ public static final String TRANSTYPE_TRANSDTL_REVERT = "revert"; //取消
+
+
}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/MapSetUtil.java b/src/main/java/com/supwisdom/dlpay/bus/util/MapSetUtil.java
new file mode 100644
index 0000000..f7f724b
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/MapSetUtil.java
@@ -0,0 +1,69 @@
+package com.supwisdom.dlpay.bus.util;
+
+import com.supwisdom.dlpay.bus.bean.BusThirdpartPayReq;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+public class MapSetUtil {
+ public static boolean setBeanValue(Object bean, String methodname, Object value) throws Exception {
+ Class clazz = bean.getClass();
+ String method = "set" + StringUtil.firstWordUpperCase(methodname);
+ Method m;
+ m = clazz.getMethod(method,value.getClass());
+ m.invoke(bean, value);
+
+ return true;
+ }
+
+ public static HashMap<String, String> ObjecttoMap(Object obj) {
+
+ HashMap<String, String> map = new HashMap<String, String>();
+ try {
+ Class<?> a = null;
+ a = obj.getClass();
+ Field[] fields = a.getDeclaredFields();
+ for (int j = 0; j < fields.length; j++) {
+ String name = fields[j].getName();
+ if ("hashValue".equals(name)) {
+ continue;
+ }
+ StringBuffer getterMethodName = new StringBuffer();
+ char firstChar = Character.toUpperCase(name.charAt(0));
+ getterMethodName.append("get").append(firstChar)
+ .append(name.substring(1));
+ Method m = a.getMethod(getterMethodName.toString(), (Class<?>[]) null);
+ Object objectValue = m.invoke(obj, (Object[]) null);
+ String value = "";
+ if (objectValue != null) {
+ value = objectValue.toString();
+ }
+ map.put(name, value);
+ }
+
+ } catch (Exception e) {
+ System.err.println(e + "error");
+ }
+
+ return map;
+
+ }
+
+
+
+ public static void main(String[] args) {
+ BusThirdpartPayReq req = new BusThirdpartPayReq();
+ try {
+ setBeanValue(req, "amount", 1);
+ System.out.println(req.getAmount());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+
+ }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/MapSort.java b/src/main/java/com/supwisdom/dlpay/bus/util/MapSort.java
new file mode 100644
index 0000000..3946d05
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/MapSort.java
@@ -0,0 +1,39 @@
+package com.supwisdom.dlpay.bus.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+public class MapSort {
+ /**
+ *
+ * @Title: sortMap
+ * @Description: 对集合内的数据按key的字母顺序做排序
+ */
+ public static List<Map.Entry<String, String>> sortMap( Map<String, String> map) {
+ final List<Map.Entry<String, String>> infos = new ArrayList<>(map.entrySet());
+
+ // 重写集合的排序方法:按字母顺序
+ Collections.sort(infos, Comparator.comparing(Entry::getKey,Comparator.naturalOrder()));
+ return infos;
+ }
+
+ public static void main(final String[] args) {
+ final Map<String, String> map = new HashMap<String, String>();
+ map.put("charSet", "utf-8");
+ map.put("merId", "5412");
+ map.put("acqId", "321");
+
+ List<Map.Entry<String, String>> list = new MapSort().sortMap(map);
+
+ for (Map.Entry<String, String> m : list) {
+ System.out.println(m.getKey() + ":" + m.getValue());
+ }
+
+ }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
index f00bbc3..8ee9d7b 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
@@ -113,4 +113,10 @@
"\"paidamount\": \"1\",\"outtradeno\":\"" + refno + "\",\"yktshopid\": \"2\",\"shopid\":\"68512084\",\"sign\": \"" + sign + "\"}");
}
*/
+ public static void main(String[] args){
+ String key="dc1d26c0d43e442588092c8d45c21bce";
+ String val="pid=123";
+ String h=HMACSHA1(val,key);
+ System.out.println(h);
+ }
}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
index 9d44ea9..c642200 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
@@ -5,122 +5,138 @@
import java.util.regex.Pattern;
public class StringUtil {
- /**
- * 判断字符串是否为空
- */
- public static boolean isEmpty(String str) {
- if (null == str || "".equals(str) || "".equals(str.trim())) {
- return true;
- }
- return false;
- }
-
- /**
- * 判断List是否为空
- */
- public static boolean isEmpty(List list) {
- if (null == list || list.size() <= 0) {
- return true;
- }
- return false;
- }
-
- public static boolean equalsIgnoreCase(String str1, String str2) {
- return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2);
- }
-
- public static boolean equals(String str1, String str2) {
- return str1 == null ? str2 == null : str1.equals(str2);
- }
-
- /**
- * 手机号验证
- *
- * @param str
- * @return
- */
- public static boolean isMobile(String str) {
- Pattern p = Pattern.compile("^1[0-9]{10}$"); // 验证手机号
- Matcher m = p.matcher(str);
- return m.matches();
- }
-
- /**
- * 邮箱格式验证
- */
- public static boolean isEmail(String email) {
- boolean ret = true;
- Pattern pattern = Pattern.compile("^([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$");
- final Matcher mat = pattern.matcher(email);
- if (!mat.find()) {
- ret = false;
- }
- return ret;
- }
-
- /**
- * 身份证格式验证
- *
- * @param str
- * @return
- */
- public static boolean isIdentity(String str) {
- // 中国公民身份证格式:长度为15或18位,最后一位可以为字母
- Pattern pattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");
- final Matcher m = pattern.matcher(str);
- return m.matches();
- }
-
- /**
- * 除去数组中的空值和签名参数
- *
- * @param sArray 签名参数组
- * @return 去掉空值与签名参数后的新签名参数组
- */
- public static Map<String, String> paraFilter(Map<String, String> sArray) {
- Map<String, String> result = new HashMap<String, String>();
- if (sArray == null || sArray.size() <= 0) {
- return result;
- }
- for (String key : sArray.keySet()) {
- String value = sArray.get(key);
- if (null == value || "".equals(value.trim()) || "null".equalsIgnoreCase(value.trim()) || key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")) {
- continue;
- }
- result.put(key, value);
- }
- return result;
- }
-
- /**
- * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
- *
- * @param params 需要排序并参与字符拼接的参数组
- * @return 拼接后字符串
- */
- public static String createLinkString(Map<String, String> params) {
-
- List<String> keys = new ArrayList<String>(params.keySet());
- Collections.sort(keys);
-
- String prestr = "";
-
- for (int i = 0; i < keys.size(); i++) {
- String key = keys.get(i);
- String value = params.get(key);
-
- if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
- prestr = prestr + key + "=" + value;
- } else {
- prestr = prestr + key + "=" + value + "&";
- }
+ /**
+ * 判断字符串是否为空
+ */
+ public static boolean isEmpty(String str) {
+ if (null == str || "".equals(str) || "".equals(str.trim())) {
+ return true;
+ }
+ return false;
}
- return prestr;
- }
+ /**
+ * 判断List是否为空
+ */
+ public static boolean isEmpty(List list) {
+ if (null == list || list.size() <= 0) {
+ return true;
+ }
+ return false;
+ }
- public static boolean isCharAndNum(String inputStr) {
- //有问题
+ public static boolean equalsIgnoreCase(String str1, String str2) {
+ return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2);
+ }
+
+ public static boolean equals(String str1, String str2) {
+ return str1 == null ? str2 == null : str1.equals(str2);
+ }
+
+ /**
+ * 手机号验证
+ *
+ * @param str
+ * @return
+ */
+ public static boolean isMobile(String str) {
+ Pattern p = Pattern.compile("^1[0-9]{10}$"); // 验证手机号
+ Matcher m = p.matcher(str);
+ return m.matches();
+ }
+
+ /**
+ * 邮箱格式验证
+ */
+ public static boolean isEmail(String email) {
+ boolean ret = true;
+ Pattern pattern = Pattern.compile("^([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\\.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$");
+ final Matcher mat = pattern.matcher(email);
+ if (!mat.find()) {
+ ret = false;
+ }
+ return ret;
+ }
+
+ /**
+ * 身份证格式验证
+ *
+ * @param str
+ * @return
+ */
+ public static boolean isIdentity(String str) {
+ // 中国公民身份证格式:长度为15或18位,最后一位可以为字母
+ Pattern pattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");
+ final Matcher m = pattern.matcher(str);
+ return m.matches();
+ }
+
+ /**
+ * 除去数组中的空值和签名参数
+ *
+ * @param sArray 签名参数组
+ * @return 去掉空值与签名参数后的新签名参数组
+ */
+ public static Map<String, String> paraFilter(Map<String, String> sArray) {
+ Map<String, String> result = new HashMap<String, String>();
+ if (sArray == null || sArray.size() <= 0) {
+ return result;
+ }
+ for (String key : sArray.keySet()) {
+ String value = sArray.get(key);
+ if (null == value || "".equals(value.trim()) || "null".equalsIgnoreCase(value.trim()) || key.equalsIgnoreCase("sign") || key.equalsIgnoreCase("sign_type")) {
+ continue;
+ }
+ result.put(key, value);
+ }
+ return result;
+ }
+
+ /**
+ * 首字母大写
+ * @param str
+ * @return
+ */
+
+ public static String firstWordUpperCase(String str) {
+ char[] ch = str.toCharArray();
+ if (ch[0] >= 'a' && ch[0] <= 'z') {
+ ch[0] = (char) (ch[0] - 32);
+ }
+ return new String(ch);
+ }
+
+ /**
+ * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
+ *
+ * @param params 需要排序并参与字符拼接的参数组
+ * @return 拼接后字符串
+ */
+ public static String createLinkString(Map<String, String> params) {
+
+ List<String> keys = new ArrayList<String>(params.keySet());
+ Collections.sort(keys);
+
+ String prestr = "";
+
+ for (int i = 0; i < keys.size(); i++) {
+ String key = keys.get(i);
+ if(!"sign".equalsIgnoreCase(key)){
+ String value = params.get(key);
+
+ if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
+ prestr = prestr + key + "=" + value;
+ } else {
+ prestr = prestr + key + "=" + value + "&";
+ }
+ }
+ }
+
+ return prestr;
+ }
+
+ public static boolean isCharAndNum(String inputStr) {
+ //有问题
/*Pattern p = Pattern.compile("\\w+");
Matcher m = p.matcher(inputStr);
if (m.matches()) {
@@ -129,8 +145,8 @@
} else {
return true;
}*/
- return true;
- }
+ return true;
+ }
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index bd7e1e4..d4166cb 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -121,7 +121,7 @@
.antMatcher("/api/**")
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
- //.antMatchers("/api/pos/**").permitAll()
+ .antMatchers("/api/thirdpart/**").permitAll()
.antMatchers("/api/notify/**").permitAll()
.antMatchers("/api/common/**").hasAnyRole("THIRD_COMMON", "THIRD_ADMIN")
.antMatchers("/api/consume/**").hasRole("THIRD_CONSUME")
@@ -130,6 +130,7 @@
.antMatchers("/api/shop/**").hasRole("THIRD_SHOP")
.antMatchers("/api/pos/**").hasRole("THIRD_SHOP")
.antMatchers("/api/bus/**").hasRole("THIRD_SHOP")
+ .antMatchers("/api/thirdpart/**").hasRole("THIRD_SHOP")
.anyRequest().hasRole("THIRD_COMMON")
.and()
.csrf().ignoringAntMatchers("/api/**")
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 76b87de..eac4a8c 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -22,7 +22,7 @@
<div class="layui-header">
<div class="layui-logo">
<img th:src="@{/static/custom/images/logo.png}"/>
- <cite>食堂应用中心</cite>
+ <cite>车载应用中心</cite>
</div>
<ul class="layui-nav layui-layout-left">
<li class="layui-nav-item" lay-unselect>