|
@@ -797,6 +797,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
}
|
|
|
List<CmReceiptOrderRelation> relationList = cmReceiptOrderRelationDao.findByOrderID(orderId.toString());
|
|
|
if (null != relationList && relationList.size() > 0) {
|
|
|
+ Integer userId = cmReceiptOrderRelationDao.findUserId(orderId);
|
|
|
for (CmReceiptOrderRelation orderRelation : relationList) {
|
|
|
JSONObject json = new JSONObject();
|
|
|
json.put("merAccount", merAccount);
|
|
@@ -825,6 +826,16 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
String msg = result.getString("msg");
|
|
|
logger.info("第三方退款失败>>>>>>>msg:" + msg);
|
|
|
throw new Exception("第三方退款失败!");
|
|
|
+ }else{
|
|
|
+ //存cm_online_refund
|
|
|
+ CmOnlineRefundVo cmOnlineRefundVo = new CmOnlineRefundVo();
|
|
|
+ cmOnlineRefundVo.setUserId(userId);
|
|
|
+ cmOnlineRefundVo.setOrderId(orderId.toString());
|
|
|
+ cmOnlineRefundVo.setAmount(orderRelation.getAssociateAmount().toString());
|
|
|
+ cmOnlineRefundVo.setRefundType("1");
|
|
|
+ cmOnlineRefundVo.setMborderId(orderRelation.getMbOrderId());
|
|
|
+ cmOnlineRefundVo.setOrderRequestNo(merchantRefundNo);
|
|
|
+ cmReceiptOrderRelationDao.insertOnlineRefund(cmOnlineRefundVo);
|
|
|
}
|
|
|
}
|
|
|
//cdr表payway为3余额支付,查是否有线上余额支付
|
|
@@ -832,8 +843,8 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
//查当前单线上余额支付总金额
|
|
|
Double onlineMoneyPay = cmReceiptOrderRelationDao.findOnlineMoneyPay(orderId);
|
|
|
if (null != onlineMoneyPay && onlineMoneyPay >= 0.01) {
|
|
|
+ logger.info("线上余额退现金==============orderId==>"+orderId);
|
|
|
//根据userid查产生线上余额的唯一请求单号,发起退款请求
|
|
|
- Integer userId = cmReceiptOrderRelationDao.findUserId(orderId);
|
|
|
//用户名下未分帐的线上余额订单mborderid
|
|
|
List<String> mborderIds = cmReceiptOrderRelationDao.findMborderId(userId);
|
|
|
//用户名下线上退款回线上余额的原mborderid
|
|
@@ -842,14 +853,49 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
if (onlineMoneyPay > 0) {
|
|
|
//该单线上余额
|
|
|
Double money = cmReceiptOrderRelationDao.findMoney(s);
|
|
|
- //待支付总线上余额>该笔退款金额,则退全额,否则退待支付
|
|
|
+ //实际退款=待支付总线上余额>该笔退款金额,则退全额,否则退待支付
|
|
|
Double refundMoney = MathUtil.compare(onlineMoneyPay, money) > 0 ? money : onlineMoneyPay;
|
|
|
- String payType=cmReceiptOrderRelationDao.findPayTypeByOrderRequestNo(s);
|
|
|
- //todo 退款
|
|
|
-
|
|
|
-
|
|
|
+ //退款
|
|
|
+ // 当前时间戳
|
|
|
+ long time = System.currentTimeMillis() / 1000;
|
|
|
+ json.put("time", time);
|
|
|
+ //商户退款流水号,由商户自行生成,必须唯一 orderid+余额退现+orid
|
|
|
+ String merchantRefundNo = orderId + "YETX" + orderRelation.getId();
|
|
|
+ json.put("merchantRefundNo", merchantRefundNo);
|
|
|
+ //退款金额,单位分,必须大于0
|
|
|
+ int refundAmt = (int) (refundMoney * 100);
|
|
|
+ json.put("refundAmt", refundAmt);
|
|
|
+ //退款原因
|
|
|
+ String refundCause = "用户主动退款";
|
|
|
+ json.put("refundCause", refundCause);
|
|
|
+ //平台交易订单号
|
|
|
+ json.put("mbOrderId", s);
|
|
|
+ String sign = PayUtils.buildSign(json, merKey);
|
|
|
+ json.put("sign", sign);
|
|
|
+ String data = PayUtils.buildDataPrivate(json, merKey);
|
|
|
+ JSONObject result = PayUtils.httpPost("https://platform.mhxxkj.com/paygateway/mbrefund/orderRefund/v1", merAccount, data);
|
|
|
+ String code = result.getString("code");
|
|
|
+ if (!"000000".equals(code)) {
|
|
|
+ String msg = result.getString("msg");
|
|
|
+ logger.info("余额退现失败>>>>>>>msg:" + msg);
|
|
|
+ throw new Exception("第三方退款失败!");
|
|
|
+ }else{
|
|
|
+ //存cm_online_refund
|
|
|
+ CmOnlineRefundVo cmOnlineRefundVo = new CmOnlineRefundVo();
|
|
|
+ cmOnlineRefundVo.setUserId(userId);
|
|
|
+ cmOnlineRefundVo.setOrderId(orderId.toString());
|
|
|
+ cmOnlineRefundVo.setAmount(refundMoney.toString());
|
|
|
+ cmOnlineRefundVo.setRefundType("2");
|
|
|
+ cmOnlineRefundVo.setMborderId(s);
|
|
|
+ cmOnlineRefundVo.setOrderRequestNo(merchantRefundNo);
|
|
|
+ cmReceiptOrderRelationDao.insertOnlineRefund(cmOnlineRefundVo);
|
|
|
+ }
|
|
|
+ //应付减已退
|
|
|
onlineMoneyPay = MathUtil.sub(onlineMoneyPay, money).doubleValue();
|
|
|
}
|
|
|
+ if(onlineMoneyPay<=0){
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if(onlineMoneyPay<=0){
|