|
@@ -543,43 +543,79 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
}
|
|
|
newOrderService.update(newOrder);
|
|
|
//判断是否选择退回余额
|
|
|
- if ((returnedPurchase.getReturnedWay().equals("1") && returnedPurchase.getRefundBalanceFee() > 0d) || newOrder.getRechargeGoods() != null) {
|
|
|
+ //returnway=1,退线下余额>0或退线上余额>0 是定金订单???
|
|
|
+ //退账户线下余额
|
|
|
+ Double refundBalanceFee = null == returnedPurchase.getRefundBalanceFee() ? 0 : returnedPurchase.getRefundBalanceFee();
|
|
|
+ //退账户线上余额
|
|
|
+ Double refundOnlineBalanceFee = null == returnedPurchase.getRefundOnlineBalanceFee() ? 0 : returnedPurchase.getRefundOnlineBalanceFee();
|
|
|
+ if ((returnedPurchase.getReturnedWay().equals("1") && refundBalanceFee > 0d) || null != newOrder.getRechargeGoods() || refundOnlineBalanceFee > 0) {
|
|
|
Double userMoney = user.getUserMoney();
|
|
|
Double ableUserMoney = user.getAbleUserMoney();
|
|
|
- Double refundBalanceFee = returnedPurchase.getRefundBalanceFee();
|
|
|
Double refundFee = returnedPurchase.getRefundFee();
|
|
|
- if (userMoney == null) userMoney = 0d;
|
|
|
- if (ableUserMoney == null) ableUserMoney = 0d;
|
|
|
- if (refundBalanceFee == null) refundBalanceFee = 0d;
|
|
|
+ Double onlineMoney = user.getOnlineMoney();
|
|
|
+ userMoney = userMoney == null ? 0 : userMoney;
|
|
|
+ ableUserMoney = ableUserMoney == null ? 0 : ableUserMoney;
|
|
|
+ onlineMoney = onlineMoney == null ? 0 : onlineMoney;
|
|
|
user.setUserID(newOrder.getUserID());
|
|
|
|
|
|
- //添加余额收支记录
|
|
|
CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
|
|
|
- cmUserBalanceRecord.setUserId(newOrder.getUserID());
|
|
|
- cmUserBalanceRecord.setType("1");
|
|
|
- cmUserBalanceRecord.setBalanceType("3");
|
|
|
- cmUserBalanceRecord.setAddDate(new Date());
|
|
|
- //设置余额支付
|
|
|
- cmUserBalanceRecord.setAmount(String.valueOf(returnedPurchase.getRefundBalanceFee()));
|
|
|
cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
|
|
|
- cmUserBalanceRecord.setReturnedId(Integer.parseInt(returnedPurchase.getId()));
|
|
|
+ cmUserBalanceRecord.setAddDate(new Date());
|
|
|
+ cmUserBalanceRecord.setUserId(newOrder.getUserID());
|
|
|
cmUserBalanceRecord.setDelFlag("0");
|
|
|
-
|
|
|
+ cmUserBalanceRecord.setReturnedId(Integer.parseInt(returnedPurchase.getId()));
|
|
|
+ //充值订金或者充值余额>0
|
|
|
+ //线上退回/线下退回扣减余额
|
|
|
if (newOrder.getRechargeGoods() != null) {
|
|
|
- user.setUserMoney(userMoney - refundFee);
|
|
|
- cmUserBalanceRecord.setAmount(String.valueOf(refundFee));
|
|
|
- cmUserBalanceRecord.setType("2");
|
|
|
- if (newOrder.getRechargeGoods() == 1) {
|
|
|
- cmUserBalanceRecord.setBalanceType("8");
|
|
|
- } else if (newOrder.getRechargeGoods() == 2) {
|
|
|
- cmUserBalanceRecord.setBalanceType("9");
|
|
|
+ String payType = cmReturnedPurchaseDao.findPayType(newOrder.getOrderID());
|
|
|
+ //1线上2线下
|
|
|
+ if ("1".equals(payType)) {
|
|
|
+ user.setUserMoney(onlineMoney - refundFee);
|
|
|
+ user.setAbleUserMoney(ableUserMoney - refundFee);
|
|
|
+ cmUserBalanceRecord.setAmount(String.valueOf(refundFee));
|
|
|
+ cmUserBalanceRecord.setType("2");
|
|
|
+ if (newOrder.getRechargeGoods() == 1) {
|
|
|
+ cmUserBalanceRecord.setBalanceType("18");
|
|
|
+ } else if (newOrder.getRechargeGoods() == 2) {
|
|
|
+ cmUserBalanceRecord.setBalanceType("19");
|
|
|
+ }
|
|
|
+ cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
+ cmUserDao.updateMoney(user);
|
|
|
+ } else {
|
|
|
+ user.setUserMoney(userMoney - refundFee);
|
|
|
+ user.setAbleUserMoney(ableUserMoney - refundFee);
|
|
|
+ cmUserBalanceRecord.setAmount(String.valueOf(refundFee));
|
|
|
+ cmUserBalanceRecord.setType("2");
|
|
|
+ if (newOrder.getRechargeGoods() == 1) {
|
|
|
+ cmUserBalanceRecord.setBalanceType("8");
|
|
|
+ } else if (newOrder.getRechargeGoods() == 2) {
|
|
|
+ cmUserBalanceRecord.setBalanceType("9");
|
|
|
+ }
|
|
|
+ cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
+ cmUserDao.updateMoney(user);
|
|
|
}
|
|
|
} else {
|
|
|
+ cmUserBalanceRecord.setType("1");
|
|
|
user.setUserMoney(userMoney + refundBalanceFee);
|
|
|
- user.setAbleUserMoney(ableUserMoney + refundBalanceFee);
|
|
|
+ user.setOnlineMoney(onlineMoney + refundOnlineBalanceFee);
|
|
|
+ user.setAbleUserMoney(ableUserMoney + refundBalanceFee + refundOnlineBalanceFee);
|
|
|
+ if (refundBalanceFee > 0) {
|
|
|
+ //添加线下余额收支记录
|
|
|
+ cmUserBalanceRecord.setBalanceType("3");
|
|
|
+ //设置余额支付
|
|
|
+ cmUserBalanceRecord.setAmount(refundBalanceFee.toString());
|
|
|
+
|
|
|
+ cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
+ }
|
|
|
+ if (refundOnlineBalanceFee > 0) {
|
|
|
+ //添加线上余额收支记录
|
|
|
+ cmUserBalanceRecord.setBalanceType("13");
|
|
|
+ //设置余额支付
|
|
|
+ cmUserBalanceRecord.setAmount(refundOnlineBalanceFee.toString());
|
|
|
+ cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
+ }
|
|
|
+ cmUserDao.updateMoney(user);
|
|
|
}
|
|
|
- cmUserDao.updateMoney(user);
|
|
|
- cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
}
|
|
|
//修改子订单信息
|
|
|
updateShopOrderAmount(newOrder.getOrderID());
|
|
@@ -694,7 +730,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void updateShopOrderAmount(Integer orderId) {
|
|
|
+ public void updateShopOrderAmount(Integer orderId) {
|
|
|
//修改子订单付供应商金额
|
|
|
List<NewShopOrder> shopOrders = newShopOrderDao.findListByOrderID(orderId);
|
|
|
shopOrders.removeIf(s -> 998 == s.getShopID());
|
|
@@ -728,7 +764,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
*
|
|
|
* @param orderId
|
|
|
*/
|
|
|
- private void theOnlineRefund(Integer orderId) throws Exception {
|
|
|
+ public void theOnlineRefund(Integer orderId) throws Exception {
|
|
|
//商户标识
|
|
|
String merAccount = "aa9aee6a148843a6a9e4ea117df4454b";
|
|
|
//私钥,商户密钥
|
|
@@ -757,6 +793,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);
|
|
@@ -781,10 +818,107 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
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");
|
|
|
+ logger.info("返回结果-------------------------》"+result.toString());
|
|
|
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(orderRelation.getAssociateAmount().toString());
|
|
|
+ cmOnlineRefundVo.setRefundType("1");
|
|
|
+ cmOnlineRefundVo.setMborderId(orderRelation.getMbOrderId());
|
|
|
+ cmOnlineRefundVo.setOrderRequestNo(merchantRefundNo);
|
|
|
+ cmReceiptOrderRelationDao.insertOnlineRefund(cmOnlineRefundVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //cdr表payway为3余额支付,查是否有线上余额支付
|
|
|
+ if ("3".equals(orderRelation.getPayWay())) {
|
|
|
+ //查当前单线上余额支付总金额
|
|
|
+ Double onlineMoneyPay = cmReceiptOrderRelationDao.findOnlineMoneyPay(orderId);
|
|
|
+ if (null != onlineMoneyPay && onlineMoneyPay >= 0.01) {
|
|
|
+ logger.info("线上余额退现金==============orderId==>" + orderId);
|
|
|
+ //根据userid查产生线上余额的唯一请求单号,发起退款请求
|
|
|
+ //用户名下未分帐的线上余额订单mborderid
|
|
|
+ List<String> mborderIds = cmReceiptOrderRelationDao.findMborderId(userId);
|
|
|
+ //用户名下线上退款回线上余额的原mborderid
|
|
|
+ if (mborderIds != null && mborderIds.size() > 0) {
|
|
|
+ for (String s : mborderIds) {
|
|
|
+ if (onlineMoneyPay > 0) {
|
|
|
+ //该单线上余额
|
|
|
+ Double money = cmReceiptOrderRelationDao.findMoney(s);
|
|
|
+ //实际退款=待支付总线上余额>该笔退款金额,则退全额,否则退待支付
|
|
|
+ Double refundMoney = MathUtil.compare(onlineMoneyPay, money) > 0 ? money : onlineMoneyPay;
|
|
|
+ //退款
|
|
|
+ // 当前时间戳
|
|
|
+ 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) {
|
|
|
+ CmUser user = cmUserDao.get(userId.toString());
|
|
|
+ //线上余额退完,user表减余额,cubr表统计余额减少
|
|
|
+ CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
|
|
|
+ cmUserBalanceRecord.setBalanceType("19");
|
|
|
+ cmUserBalanceRecord.setType("2");
|
|
|
+ cmUserBalanceRecord.setUserId(user.getUserID());
|
|
|
+ cmUserBalanceRecord.setAddDate(new Date());
|
|
|
+ cmUserBalanceRecord.setAmount(user.getOnlineMoney().toString());
|
|
|
+ cmUserBalanceRecord.setOrderId(orderId);
|
|
|
+ cmUserBalanceRecord.setDelFlag("0");
|
|
|
+ cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
+ //user表减余额
|
|
|
+ double v = MathUtil.sub(user.getAbleUserMoney(), user.getOnlineMoney()).doubleValue();
|
|
|
+ user.setOnlineMoney(0d);
|
|
|
+ user.setAbleUserMoney(v);
|
|
|
+ cmUserDao.updateMoney(user);
|
|
|
+ }
|
|
|
+ if (onlineMoneyPay > 0) {
|
|
|
+ logger.info("订单不足退线上余额,请检查订单");
|
|
|
+ throw new RuntimeException ("订单不足退线上余额,请检查订单!");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ logger.info("线上余额过小或无线上余额支付退款=========orderId==> " + orderId);
|
|
|
}
|
|
|
}
|
|
|
}
|