|
@@ -185,22 +185,61 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
//保存收款记录
|
|
|
productService.saveDiscernReceipt(balancePayFee, orderId, "【订单支付,余额抵扣】");
|
|
|
}
|
|
|
+ //可用=可用-本次抵扣
|
|
|
availableMoney = MathUtil.sub(availableMoney, balancePayFee).doubleValue();
|
|
|
- payOrderMapper.updateMoneyByUserId(userMoney, availableMoney, order.getUserId());
|
|
|
- log.info("【订单支付,余额抵扣】>>>>>>>>>>>更新用户余额(update[user])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
|
- //保存余额到余额收支记录
|
|
|
- BalanceRecordPo balanceRecord = new BalanceRecordPo();
|
|
|
- balanceRecord.setUserId(order.getUserId());
|
|
|
- balanceRecord.setType(2);
|
|
|
- balanceRecord.setBalanceType(1);
|
|
|
- balanceRecord.setAddDate(new Date());
|
|
|
- balanceRecord.setAmount(balancePayFee);
|
|
|
- balanceRecord.setOrderId(orderId);
|
|
|
- balanceRecord.setRemark("订单支付,余额抵扣");
|
|
|
- balanceRecord.setDelFlag(0);
|
|
|
- // 保存 余额收支记录
|
|
|
- baseMapper.insertBalanceRecord(balanceRecord);
|
|
|
- log.info("【订单支付,余额抵扣】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + orderId);
|
|
|
+ //区分扣多少线上扣多少线下,优先线上余额
|
|
|
+ Double onlineMoney = baseMapper.getonlineMoney(order.getUserId());
|
|
|
+ if (onlineMoney > balancePayFee) {
|
|
|
+ onlineMoney = MathUtil.sub(onlineMoney, balancePayFee).doubleValue();
|
|
|
+ payOrderMapper.updateOnlineMoneyByUserId(onlineMoney, availableMoney, order.getUserId());
|
|
|
+ log.info("【订单支付,余额抵扣】>>>>>>>>>>>更新用户余额(update[user])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
|
+ //保存余额到余额收支记录
|
|
|
+ BalanceRecordPo balanceRecord = new BalanceRecordPo();
|
|
|
+ balanceRecord.setUserId(order.getUserId());
|
|
|
+ balanceRecord.setType(2);
|
|
|
+ balanceRecord.setBalanceType(10);
|
|
|
+ balanceRecord.setAddDate(new Date());
|
|
|
+ balanceRecord.setAmount(balancePayFee);
|
|
|
+ balanceRecord.setOrderId(orderId);
|
|
|
+ balanceRecord.setRemark("订单支付,余额抵扣");
|
|
|
+ balanceRecord.setDelFlag(0);
|
|
|
+ // 保存 余额收支记录
|
|
|
+ baseMapper.insertBalanceRecord(balanceRecord);
|
|
|
+ log.info("【订单支付,余额抵扣】>>>>>>>>>>>>>>>>>>>>>>>>>>新增用户余额收支记录(insert[cm_user_balance_record])orderId:" + orderId);
|
|
|
+ } else {//线上不够,线上全抵,剩余线下
|
|
|
+ //线下=原线下-(本次抵扣-线上)
|
|
|
+ userMoney = MathUtil.sub(userMoney, MathUtil.sub(balancePayFee, onlineMoney)).doubleValue();
|
|
|
+ //更新线上/线下余额 线上置为0,全部抵扣
|
|
|
+ payOrderMapper.updateMoneyByUserId(userMoney, availableMoney, 0d, order.getUserId());
|
|
|
+ log.info("【订单支付,余额抵扣】>>>>>>>>>>>更新用户余额(update[user])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
|
+ if (onlineMoney > 0) {
|
|
|
+ // 线上>0有抵扣的情况下保存线上余额到余额收支记录
|
|
|
+ BalanceRecordPo balanceRecord = new BalanceRecordPo();
|
|
|
+ balanceRecord.setUserId(order.getUserId());
|
|
|
+ balanceRecord.setType(2);
|
|
|
+ balanceRecord.setBalanceType(10);
|
|
|
+ balanceRecord.setAddDate(new Date());
|
|
|
+ balanceRecord.setAmount(onlineMoney);
|
|
|
+ balanceRecord.setOrderId(orderId);
|
|
|
+ balanceRecord.setRemark("订单支付,余额抵扣");
|
|
|
+ balanceRecord.setDelFlag(0);
|
|
|
+ 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);
|
|
|
+ }
|
|
|
}
|
|
|
Map<String, Object> map = new HashMap<>(2);
|
|
|
map.put("order", order);
|
|
@@ -404,7 +443,17 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
code = 5;
|
|
|
}
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- String time = dateFormat.format(orderPayLink.getEffectiveTime());
|
|
|
+ //原24小时有效期,增加2天到72小时
|
|
|
+ String time = "";
|
|
|
+ Date effectiveTime = orderPayLink.getEffectiveTime();
|
|
|
+ Calendar ca = Calendar.getInstance();
|
|
|
+ ca.setTime(effectiveTime);
|
|
|
+ ca.add(Calendar.DAY_OF_MONTH, 2);
|
|
|
+ if (null != orderPayLink.getOrderId()) {
|
|
|
+ time = dateFormat.format(ca.getTime());
|
|
|
+ } else {
|
|
|
+ time = dateFormat.format(orderPayLink.getEffectiveTime());
|
|
|
+ }
|
|
|
Map<String, Object> map = new HashMap<>(5);
|
|
|
map.put("type", type);
|
|
|
map.put("orderPayLink", orderPayLink);
|
|
@@ -760,12 +809,13 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
}
|
|
|
if (rechargeFlag > 0) {
|
|
|
// 账户余额
|
|
|
- double oldUserMoney = baseMapper.getUserMoney(order.getUserId());
|
|
|
+ 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.updateMoneyByUserId(userMoney, availableMoney, order.getUserId());
|
|
|
+ //充值线上余额
|
|
|
+ payOrderMapper.updateOnlineMoneyByUserId(userMoney, availableMoney, order.getUserId());
|
|
|
log.info("【支付异步回调】>>>>>>>>>>>更新用户余额(update[user])userId:" + order.getUserId() + ",orderId:" + orderId);
|
|
|
//保存余额到余额收支记录
|
|
|
BalanceRecordPo balanceRecord = new BalanceRecordPo();
|
|
@@ -926,10 +976,16 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
String currentTime = format.format(calendar.getTime());
|
|
|
// 查询未分账已支付收款
|
|
|
List<OrderReceiptRelationPo> orderRelations = payOrderMapper.getUndividedPaidReceipt(currentTime);
|
|
|
+ // 上面过滤了余额抵扣, 把线上余额抵扣单补充到list里面,线上余额抵扣的金额视为正常收款金额进行分账
|
|
|
+ List<OrderReceiptRelationPo> onlineRelations = payOrderMapper.getOnlineBalance(currentTime);
|
|
|
+ // 过滤不足分账金额的单
|
|
|
+ onlineRelations.removeIf(o -> o.getAssociateAmount() < 0.01);
|
|
|
+ // 把线上余额抵扣订单加入分账
|
|
|
+ orderRelations.addAll(onlineRelations);
|
|
|
if (orderRelations != null && orderRelations.size() > 0) {
|
|
|
for (OrderReceiptRelationPo orderRelation : orderRelations) {
|
|
|
log.info("【延时分账】>>>>>>>>>>订单id:" + orderRelation.getOrderId() + ",进入延时分账");
|
|
|
- // 订单信息
|
|
|
+ // 收款对应的订单信息
|
|
|
OrderVo order = orderCommonMapper.getOrderByOrderId(orderRelation.getOrderId());
|
|
|
PayParamBo payParam = new PayParamBo();
|
|
|
payParam.setPayAmount(MathUtil.mul(orderRelation.getAssociateAmount(), 100).intValue());
|
|
@@ -963,6 +1019,9 @@ public class PayOrderServiceImpl implements PayOrderService {
|
|
|
totalAmount2 = MathUtil.add(totalAmount2, account.getSplitAccount()).doubleValue();
|
|
|
} else if (3 == account.getType()) {
|
|
|
totalAmount3 = MathUtil.add(totalAmount3, account.getSplitAccount()).doubleValue();
|
|
|
+ } else if (5 == account.getType()) {
|
|
|
+ totalAmount = MathUtil.add(totalAmount, account.getSplitAccount());
|
|
|
+ sp = account.getSubUserNo();
|
|
|
}
|
|
|
}
|
|
|
addMaps(maps, totalAmount1, PayUtil.publicAccountNo);
|