|
@@ -124,6 +124,8 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
return ResponseJson.success(map);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 订单支付,余额抵扣
|
|
|
*
|
|
@@ -142,6 +144,7 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
Double availableMoney = baseMapper.getAbleUserMoney(order.getUserId());
|
|
|
Double balancePayFee = 0d;
|
|
|
if (MathUtil.compare(availableMoney, 0) > 0) {
|
|
|
+ //可用余额>待付
|
|
|
if (MathUtil.compare(availableMoney, order.getPendingPayments()) >= 0) {
|
|
|
if (OrderStatus.UNCONFIRMED.getCode() != order.getStatus()) {
|
|
|
if (1 == order.getSendOutStatus()) {
|
|
@@ -168,8 +171,9 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
order.setReceiptStatus(2);
|
|
|
balancePayFee = availableMoney;
|
|
|
}
|
|
|
-
|
|
|
+ //设置余额支付金额
|
|
|
order.setBalancePayFee(MathUtil.add(order.getBalancePayFee(), balancePayFee).doubleValue());
|
|
|
+ //设置真实支付金额
|
|
|
order.setPayableAmount(MathUtil.sub(order.getPayableAmount(), balancePayFee).doubleValue());
|
|
|
Date date = new Date();
|
|
|
String curDateStr = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
@@ -181,7 +185,6 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
// 修改账户余额
|
|
|
double userMoney = baseMapper.getUserMoney(order.getUserId());
|
|
|
if (OrderStatus.UNCONFIRMED.getCode() != order.getStatus()) {
|
|
|
- userMoney = MathUtil.sub(userMoney, balancePayFee).doubleValue();
|
|
|
//保存收款记录
|
|
|
productService.saveDiscernReceipt(balancePayFee, orderId, "【订单支付,余额抵扣】");
|
|
|
}
|
|
@@ -189,6 +192,7 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
availableMoney = MathUtil.sub(availableMoney, balancePayFee).doubleValue();
|
|
|
//区分扣多少线上扣多少线下,优先线上余额
|
|
|
Double onlineMoney = baseMapper.getonlineMoney(order.getUserId());
|
|
|
+ //线上余额>本次抵扣,全抵线上
|
|
|
if (onlineMoney > balancePayFee) {
|
|
|
onlineMoney = MathUtil.sub(onlineMoney, balancePayFee).doubleValue();
|
|
|
payOrderMapper.updateOnlineMoneyByUserId(onlineMoney, availableMoney, order.getUserId());
|
|
@@ -226,19 +230,21 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
baseMapper.insertBalanceRecord(balanceRecord);
|
|
|
log.info("【订单支付,线上/线下余额抵扣】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + orderId);
|
|
|
}
|
|
|
- //保存线下余额到余额收支记录
|
|
|
- BalanceRecordPo balanceRecord = new BalanceRecordPo();
|
|
|
- balanceRecord.setUserId(order.getUserId());
|
|
|
- balanceRecord.setType(2);
|
|
|
- balanceRecord.setBalanceType(1);
|
|
|
- balanceRecord.setAddDate(new Date());
|
|
|
- balanceRecord.setAmount(userMoney);
|
|
|
- balanceRecord.setOrderId(orderId);
|
|
|
- balanceRecord.setRemark("订单支付,余额抵扣");
|
|
|
- balanceRecord.setDelFlag(0);
|
|
|
- // 保存 余额收支记录
|
|
|
- baseMapper.insertBalanceRecord(balanceRecord);
|
|
|
- log.info("【订单支付,余额抵扣】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + orderId);
|
|
|
+ if (userMoney > 0) {
|
|
|
+ // 保存线下余额到余额收支记录
|
|
|
+ BalanceRecordPo balanceRecord1 = new BalanceRecordPo();
|
|
|
+ balanceRecord1.setUserId(order.getUserId());
|
|
|
+ balanceRecord1.setType(2);
|
|
|
+ balanceRecord1.setBalanceType(1);
|
|
|
+ balanceRecord1.setAddDate(new Date());
|
|
|
+ balanceRecord1.setAmount(userMoney);
|
|
|
+ balanceRecord1.setOrderId(orderId);
|
|
|
+ balanceRecord1.setRemark("订单支付,余额抵扣");
|
|
|
+ balanceRecord1.setDelFlag(0);
|
|
|
+ // 保存 余额收支记录
|
|
|
+ baseMapper.insertBalanceRecord(balanceRecord1);
|
|
|
+ }
|
|
|
+ log.info("【订单支付,线上/线下余额抵扣】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + orderId);
|
|
|
}
|
|
|
}
|
|
|
Map<String, Object> map = new HashMap<>(2);
|
|
@@ -288,6 +294,8 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
}
|
|
|
order.setReceiptAmount(receiptAmount.get());
|
|
|
}
|
|
|
+ // 总成本
|
|
|
+ AtomicDouble totalCostPrice = new AtomicDouble(0d);
|
|
|
// 商品数据
|
|
|
List<OrderProductVo> orderProductList = orderCommonMapper.getOrderProductByOrderId(orderId);
|
|
|
//过滤运费商品
|
|
@@ -300,17 +308,44 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
if (productTaxFlag) {
|
|
|
order.setInvoiceStatus(true);
|
|
|
}
|
|
|
+ //当应付金额小于订单总成本时,不能走线上支付,总成本=商品成本 + 供应商运费 + 供应商税费
|
|
|
+ double costPrice = MathUtil.mul(orderProduct.getCostPrice(), orderProduct.getNum()).doubleValue();
|
|
|
+ if (Integer.valueOf(0).equals(orderProduct.getIncludedTax()) && !Integer.valueOf(3).equals(orderProduct.getInvoiceType())) {
|
|
|
+ //应付总税费
|
|
|
+ Double payableTax = MathUtil.mul(orderProduct.getSingleShouldPayTotalTax(), orderProduct.getNum()).doubleValue();
|
|
|
+ //成本+税费
|
|
|
+ costPrice = MathUtil.add(costPrice, payableTax).doubleValue();
|
|
|
+ }
|
|
|
+ List<ShopOrderVo> shopOrderList = orderCommonMapper.getShopOrderListByOrderId(order.getOrderId());
|
|
|
+ for (ShopOrderVo shopOrder : shopOrderList) {
|
|
|
+ // 付供应商运费
|
|
|
+ Double shopPostFee = shopOrder.getShopPostFee();
|
|
|
+ costPrice = MathUtil.add(costPrice, shopPostFee).doubleValue();
|
|
|
+ }
|
|
|
+ totalCostPrice.set(MathUtil.add(costPrice, totalCostPrice.get()).doubleValue());
|
|
|
});
|
|
|
+
|
|
|
// 返回数据
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("userName", userName);
|
|
|
map.put("order", order);
|
|
|
map.put("discernReceipt", discernReceiptList);
|
|
|
map.put("orderProductList", orderProductList);
|
|
|
-
|
|
|
+ //能否线上判断付供应商是否大于订单金额
|
|
|
+// orderCommonService.getDiscernReceiptAndSetOrder(order);
|
|
|
+// boolean payButton = order.isPayButton();
|
|
|
+ // 总成本>应付 不能线上 B2B<10块
|
|
|
+ //todo 判断线上/线下余额
|
|
|
+// log.info("成本: " + totalCostPrice + "================== 实付: " + order.getPayableAmount());
|
|
|
+ if (MathUtil.compare(totalCostPrice, order.getPayableAmount()) > 0 || order.getPayableAmount() <= 0.01) {
|
|
|
+ map.put("onlinePay", 2);
|
|
|
+ } else {
|
|
|
+ map.put("onlinePay", 1);
|
|
|
+ }
|
|
|
return ResponseJson.success(map);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* 生成网银支付链接
|
|
|
*
|
|
@@ -808,14 +843,16 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
}
|
|
|
}
|
|
|
if (rechargeFlag > 0) {
|
|
|
- // 账户余额
|
|
|
+ // 线上账户余额
|
|
|
double oldUserMoney = baseMapper.getonlineMoney(order.getUserId());
|
|
|
+ // 充值算线下余额
|
|
|
double userMoney = MathUtil.add(oldUserMoney, amount).doubleValue();
|
|
|
// 可用余额
|
|
|
Double oldAvailableMoney = baseMapper.getAbleUserMoney(order.getUserId());
|
|
|
+ // 可用余额=之前的可用+充值
|
|
|
double availableMoney = MathUtil.add(oldAvailableMoney, amount).doubleValue();
|
|
|
//充值线上余额
|
|
|
- payOrderMapper.updateOnlineMoneyByUserId(userMoney, availableMoney, order.getUserId());
|
|
|
+ payOrderMapper.updateUserMoney(userMoney, availableMoney, order.getUserId());
|
|
|
log.info("【支付异步回调】>>>>>>>>>>>更新用户余额(update[user])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
|
//保存余额到余额收支记录
|
|
|
BalanceRecordPo balanceRecord = new BalanceRecordPo();
|