修改离线交易逻辑,冲正交易,线上交易修改
diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 6a1a4cd..287dde0 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -28,5 +28,5 @@
payapi.appid=200001
-cron.offlinedtl=0/30 * * * * ?
+cron.offlinedtl=0 0/5 * * * ?
payapi.logintime=0 0/20 * * * ?
\ No newline at end of file
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 35480c1..c5808eb 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
@@ -175,21 +175,14 @@
tTransdtl.setBillno(systemUtilService.getRefno());
tTransdtl.setShopid(tDevice.getShopid());
tTransdtl.setAcctime(systemUtilService.getSysdatetime().getHosttime());
-
+ tTransdtl.setAmount(0d);
tTransdtl.setCusttype(customer.getCusttype());
tTransdtl.setTransdate(req.getTermdate());
- Double amount=req.getAmount() / 100.0;
- DiscountBean bean=deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(),req.getTermtime(), customer.getCustid());
- if(null!=bean){
- tTransdtl.setRuleid(bean.getRuleid());
- amount = getDiscountAmount(req.getTermdate(), customer.getCustid(), amount, bean);
- }
- tTransdtl.setAmount(amount);
tTransdtl.setManagefee(managefee);
tTransdtl.setTranstime(req.getTermtime());
- tTransdtl.setCardno(req.getCardno());
+ tTransdtl.setCardno("25002885");
tTransdtl.setTransmode(req.getTranstype());
tTransdtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_ONLINE);
@@ -277,7 +270,14 @@
resp.setRetmsg("客户" + tTransdtl.getCustid() + "不存在");
return resp;
}
+ Double amount=req.getAmount() / 100.0;
+ DiscountBean bean=deviceDiscountRuleService.getCustomerDiscount(tDevice.getId(),req.getTermtime(), cus.getCustid());
+ if(null!=bean){
+ tTransdtl.setRuleid(bean.getRuleid());
+ amount = getDiscountAmount(req.getTermdate(), cus.getCustid(), amount, bean);
+ }
+ tTransdtl.setAmount(amount);
tTransdtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_WAIT);
TTransDtl dtl=transDtlService.saveTransdtl(tTransdtl);
@@ -390,16 +390,17 @@
@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_POSDTL_NOTEXIST);
+ resp.setRetcode(ErrorCode.ERRIF_OK);
resp.setRetmsg("交易参考号" + req.getReversalbillno() + "不存在");
return resp;
}
if (!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.toUpperCase().equals(tTransDtl.getStatus().toUpperCase())) {
/* tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
tTransDtl.setAttr1("交易状态未成功");*/
- resp.setRetcode(ErrorCode.ERRIF_POSDTL_NOTEXIST);
+ resp.setRetcode(ErrorCode.ERRIF_OK);
resp.setRetmsg("流水" + req.getReversalbillno() + "交易状态未成功,不能冲正");
return resp;
}
@@ -411,10 +412,17 @@
}
try {
tTransDtl.setTermsqlno(req.getTermseqno());
- transDtlService.revertTransdtl(tTransDtl);
- resp.setTermseqno(req.getTermseqno());
- resp.setRetmsg("冲正成功");
- resp.setRetcode(ErrorCode.ERRIF_OK);
+ TTransDtl revdtl=transDtlService.doRevertTransdtl(tTransDtl);
+ if(!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(revdtl.getStatus())){
+ resp.setTermseqno(req.getTermseqno());
+ resp.setRetmsg("冲正失败,"+revdtl.getAttr1());
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ }else{
+ resp.setTermseqno(req.getTermseqno());
+ resp.setRetmsg("冲正成功");
+ resp.setRetcode(ErrorCode.ERRIF_OK);
+ }
+
return resp;
} catch (Exception e) {
e.printStackTrace();
@@ -637,7 +645,7 @@
if (null == device) {
err+="设备物理ID不存在;";
transDtl.setAttr1(err);
- offlineTransDtlService.saveTransdtl(transDtl);
+ offlineTransDtlService.saveOfflineTransdtl(transDtl);
resp.setRetmsg("保存成功");
resp.setRetcode(ErrorCode.ERRIF_OK);
return resp;
@@ -739,7 +747,7 @@
transDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
}
transDtl.setAttr1(err);
- offlineTransDtlService.saveTransdtl(transDtl);
+ offlineTransDtlService.saveOfflineTransdtl(transDtl);
resp.setRetcode(ErrorCode.ERRIF_OK);
resp.setRetmsg("保存成功");
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 3cb42e0..0f15938 100644
--- a/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
+++ b/src/main/java/com/supwisdom/dlpay/api/task/PosPayTask.java
@@ -63,7 +63,6 @@
tTransDtl.setManagefee(dtl.getManagefee());
-
CitizenCardPayinitParam param=new CitizenCardPayinitParam();
param.setBillno(dtl.getBillno());
param.setShopaccno(dtl.getShopid());
@@ -75,9 +74,7 @@
param.setAmount(amt.intValue());
CitizenPayResponse response=citizenCardPayProxy.citizencardPayinit(param);
if(response.getRetcode()!=0){
- dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
- dtl.setAttr1(response.getRetmsg()+","+ response.getException());
- offlineTransDtlService.saveTransdtl(dtl);
+ saveTransdtls(dtl, tTransDtl, response);
logger.info(dtl.getBillno()+"初始化失败,"+response.getRetcode()+","+response.getRetmsg()+","+ response.getException());
continue;
}
@@ -85,18 +82,28 @@
finishparam.setRefno(response.getRefno());
CitizenPayResponse finishresp=citizenCardPayProxy.citizencardPayFinish(finishparam);
if(finishresp.getRetcode()!=0){
- dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
- dtl.setAttr1(response.getRetmsg()+","+ response.getException());
- offlineTransDtlService.saveTransdtl(dtl);
+ saveTransdtls(dtl, tTransDtl, finishresp);
logger.info(dtl.getBillno()+"消费缺认失败,"+finishresp.getRetcode()+","+finishresp.getRetmsg()+","+ finishresp.getException());
continue;
}
+ tTransDtl.setAccdate(date);
+ tTransDtl.setAcctime(DateUtil.getNow("HHmmss"));
dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
- offlineTransDtlService.saveTransdtl(dtl);
+ offlineTransDtlService.saveOfflineTransdtl(dtl);
+ transDtlService.saveTransdtl(tTransDtl);
}
}
}
+ private void saveTransdtls(TOfflineTransDtl dtl, TTransDtl tTransDtl, CitizenPayResponse finishresp) {
+ dtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+ dtl.setAttr1(finishresp.getRetmsg() + "," + finishresp.getException());
+ tTransDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+ tTransDtl.setAttr1(finishresp.getRetmsg() + "," + finishresp.getException());
+ offlineTransDtlService.saveOfflineTransdtl(dtl);
+ transDtlService.saveTransdtl(tTransDtl);
+ }
+
}
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 7d4ff29..e21492d 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TransDtlRevertController.java
@@ -58,7 +58,7 @@
@RequestParam("limit") Integer pageSize,
@RequestParam(value = "custname", required = false) String custname,
@RequestParam(value = "accdate", required = false) String accdate,
- @RequestParam(value = "refno", required = false) String refno) {
+ @RequestParam(value = "billno", required = false) String billno) {
try {
if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
@@ -70,7 +70,7 @@
}
bean.setCustname(custname);
- bean.setBillno(refno);
+ bean.setBillno(billno);
bean.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
bean.setPageNo(pageNo);
bean.setPageSize(pageSize);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
index c8fd88e..3fd6627 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/OfflineTransDtlDao.java
@@ -22,5 +22,5 @@
@Query(value = "from TOfflineTransDtl where termsqlno=?1 and termid=?2 and accdate=?3 ")
List<TOfflineTransDtl> findByTermsqlnoAndTermidAndAccdate(Integer termsqlno,Integer termid,String accdate);
- List<TOfflineTransDtl> findAllByAccdateAndStatus(String accdate,String status);
+ List<TOfflineTransDtl> findAllByTransdateAndStatusAndTranstype(String transdate,String status,String transtype);
}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
index e151699..74f128a 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/OfflineTransDtlService.java
@@ -14,7 +14,7 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
- TOfflineTransDtl saveTransdtl(TOfflineTransDtl dtl);
+ TOfflineTransDtl saveOfflineTransdtl(TOfflineTransDtl dtl);
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
TOfflineTransDtl getTransDtlByBillno(String billno);
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 209d4d4..e8f6fde 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/TransDtlService.java
@@ -34,6 +34,9 @@
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
JsonResult revertTransdtl(TTransDtl dtl);
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ TTransDtl doRevertTransdtl(TTransDtl dtl);
+
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
Integer getMaxSeqnoToday(Integer deviceid,String accdate);
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
index e9dfdfb..8c5ea23 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/OfflineTransDtlServiceImpl.java
@@ -51,7 +51,7 @@
@Override
- public TOfflineTransDtl saveTransdtl(TOfflineTransDtl dtl) {
+ public TOfflineTransDtl saveOfflineTransdtl(TOfflineTransDtl dtl) {
return transDtlDao.save(dtl);
}
@@ -113,6 +113,6 @@
@Override
public List<TOfflineTransDtl> getUncheckOfflineTransdtl(String accdate) {
- return transDtlDao.findAllByAccdateAndStatus(accdate,"init");
+ return transDtlDao.findAllByTransdateAndStatusAndTranstype(accdate,RestaurantConstant.STATUS_TRANSDTL_INIT,RestaurantConstant.TRANSTYPE_TRANSDTL_OFFLINE);
}
}
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 935a6b0..b86ea5c 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
@@ -164,22 +164,34 @@
@Override
public JsonResult revertTransdtl(TTransDtl dtl) {
- TTransDtl targetDtl=null;
- Optional<TTransDtl> odtl=transDtlDao.findById(dtl.getBillno());
- if(odtl.isPresent()){
- targetDtl=odtl.get();
+ TTransDtl revdtl=doRevertTransdtl(dtl);
+ if(null==revdtl){
+ return JsonResult.error("撤销流水未查询到");
}
- if(null==targetDtl){
- return JsonResult.error("未查询到目标流水");
+ if (!RestaurantConstant.STATUS_TRANSDTL_SUCCESS.equals(revdtl.getStatus())){
+ return JsonResult.error("冲正失败,"+revdtl.getAttr1());
}
+ return JsonResult.ok("操作成功");
+ }
+ @Override
+ public TTransDtl doRevertTransdtl(TTransDtl dtl) {
+ TTransDtl targetDtl;
+ Optional<TTransDtl> odtl=transDtlDao.findById(dtl.getBillno());
+ if(!odtl.isPresent()){
+ targetDtl=new TTransDtl();
+ targetDtl.setBillno(systemUtilService.getRefno());
+ targetDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
+ targetDtl.setAttr1("未查询到目标流水");
+ transDtlDao.save(targetDtl);
+ return targetDtl;
+ }
+ targetDtl=odtl.get();
TTransDtl revDtl=new TTransDtl();
revDtl.setBillno(systemUtilService.getRefno());
revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_INIT);
String date=DateUtil.getNow("yyyyMMdd");
String time=DateUtil.getNow("HHmmss");
- revDtl.setAccdate(date);
- revDtl.setAcctime(time);
revDtl.setTransdate(date);
revDtl.setTranstime(time);
revDtl.setRevbillno(targetDtl.getBillno());
@@ -192,30 +204,34 @@
revDtl.setManagefee(targetDtl.getManagefee());
revDtl.setRuleid(targetDtl.getRuleid());
revDtl.setCustid(targetDtl.getCustid());
+ revDtl.setCardno(targetDtl.getCardno());
revDtl.setCustname(targetDtl.getCustname());
revDtl.setCusttype(targetDtl.getCusttype());
revDtl.setTranstype(RestaurantConstant.TRANSTYPE_TRANSDTL_REVERT);
revDtl.setAmount(targetDtl.getAmount()*-1.00);
- transDtlDao.save(revDtl);
+ // revDtl=transDtlDao.save(revDtl);
ConsumePayCancelParam cancelParam=new ConsumePayCancelParam();
- cancelParam.setBillno(revDtl.getBillno());
+ // cancelParam.setBillno(revDtl.getBillno());
cancelParam.setRefno(targetDtl.getRefno());
- cancelParam.setRequestbillno(targetDtl.getBillno());
- cancelParam.setShopaccno(targetDtl.getShopid());
- cancelParam.setTransdate(targetDtl.getTransdate());
- cancelParam.setTranstime(targetDtl.getTranstime());
+ cancelParam.setRequestbillno(revDtl.getBillno());
+ // cancelParam.setShopaccno(revDtl.getShopid());
+ cancelParam.setTransdate(revDtl.getTransdate());
+ cancelParam.setTranstime(revDtl.getTranstime());
PayReverseResponse reverseResp=transactionProxy.payCancel(cancelParam);
+ revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
if(reverseResp.getRetcode()!=0){
revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_FAIL);
-
-
+ revDtl.setAttr1(reverseResp.getRetmsg()+","+reverseResp.getException());
+ transDtlDao.save(revDtl);
+ return revDtl;
}
- revDtl.setStatus(RestaurantConstant.STATUS_TRANSDTL_SUCCESS);
+ revDtl.setAcctime(DateUtil.getNow("HHmmss"));
+ revDtl.setAccdate(date);
revDtl.setRefno(reverseResp.getRefno());
transDtlDao.save(revDtl);
targetDtl.setRevflag(1);
transDtlDao.save(targetDtl);
- return JsonResult.ok("操作成功");
+ return revDtl;
}
@Override
diff --git a/src/main/resources/templates/restaurant/transdtl/index.html b/src/main/resources/templates/restaurant/transdtl/index.html
index eada656..9fb62b3 100644
--- a/src/main/resources/templates/restaurant/transdtl/index.html
+++ b/src/main/resources/templates/restaurant/transdtl/index.html
@@ -50,6 +50,7 @@
<label class="layui-form-label"> 商户:</label>
<div class="layui-input-inline">
<select name="shopid" id="transdtl-shopid">
+ <option value="" selected>全部</option>
<option th:each="shop : ${shoplistForSelect}" th:value="${shop.shopid}">[[${shop.shopname}]]</option>
</select>
</div>
@@ -63,7 +64,7 @@
<div class="layui-input-inline">
<select name="status" id="transdtl-status">
<option value="" selected>全部</option>
- <option value="normal">成功</option>
+ <option value="success">成功</option>
<option value="fail">失败</option>
<option value="init">初始化</option>
<option value="wip">等待</option>
@@ -133,7 +134,7 @@
{field: 'custname', title: '姓名',width:100, fixed: 'left'},
{field: 'cardno', title: '市民卡号',width:100, fixed: 'left'},
{field: 'billno', title: '交易号', fixed: 'left',width:200, sort: true},
- {field: 'amount', title: '交易金额', sort: true,
+ {field: 'amount', title: '交易金额',width:100, sort: true,
templet: function (item) {
return numberFormat(item.amount,2);
}},
@@ -196,6 +197,9 @@
width:100,
align: 'center',
templet: function (item) {
+ if(shoplist[item.shopid]==undefined||shoplist[item.shopid]==null){
+ return '';
+ }
return shoplist[item.shopid];
}
},
diff --git a/src/main/resources/templates/restaurant/transdtlrev/form.html b/src/main/resources/templates/restaurant/transdtlrev/form.html
index 23a5594..65c68c8 100644
--- a/src/main/resources/templates/restaurant/transdtlrev/form.html
+++ b/src/main/resources/templates/restaurant/transdtlrev/form.html
@@ -1,6 +1,6 @@
<form id="transdtlrev-form" lay-filter="form" class="layui-form model-form">
- <input name="refno" id="refno" type="hidden"/>
+ <input name="billno" id="billno" type="hidden"/>
<div class="layui-form-item">
<label class="layui-form-label">冲正对象</label>
<div class="layui-input-block">
@@ -41,7 +41,7 @@
var dtl = admin.getTempData('t_dtl');
console.log(dtl)
if (dtl) {
- $('input[name="refno"]').attr('readonly', 'readonly');
+ $('input[name="billno"]').attr('readonly', 'readonly');
form.val('form', dtl);
}
// 表单提交事件
diff --git a/src/main/resources/templates/restaurant/transdtlrev/index.html b/src/main/resources/templates/restaurant/transdtlrev/index.html
index 564d973..b049ad8 100644
--- a/src/main/resources/templates/restaurant/transdtlrev/index.html
+++ b/src/main/resources/templates/restaurant/transdtlrev/index.html
@@ -18,7 +18,7 @@
<div class="layui-inline">
<label class="layui-form-label"> 交易号:</label>
<div class="layui-input-inline">
- <input id="transdtlrev-refno" name="refno" class="layui-input " type="text"/>
+ <input id="transdtlrev-billno" name="billno" class="layui-input " type="text"/>
</div>
</div>
<div class="layui-inline">
@@ -124,7 +124,7 @@
},
{
field: 'refno', align: 'center', title: '操作', fixed: 'right', templet: function (item) {
- if(item.transtype!='cz'){
+ if(item.transtype!='revert'){
return ' <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>冲正</a> ';
}
return '';
@@ -158,13 +158,13 @@
// 搜索按钮点击事件
$('#transdtlrev-btn-search').click(function () {
let custname = $('#transdtlrev-custname').val().trim();
- let refno = $('#transdtlrev-refno').val().trim();
+ let billno = $('#transdtlrev-billno').val().trim();
let accdate = $('#transdtlrev-accdate').val();
table.reload('transdtlrev-table', {
where: {
custname: custname,
accdate: accdate,
- refno: refno,
+ billno: billno,
}, page: {curr: 1}
});
//页面存在form需要返回false,否则layui自动刷新