|
|
@@ -878,12 +878,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
// }
|
|
|
|
|
|
// 待发货状态-最后一件商品进行退款,退款金额 = 商品金额 + 订单运费金额
|
|
|
-// if (Objects.equals(order.getHbOrderStatus(), OrderStatus.PADYED.value()) && order.getFreightAmount() > 0) {
|
|
|
-// int orderItenCount = orderItemService.count(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, order.getOrderNumber()));
|
|
|
-// if (Objects.equals(orderRefunds.size(), orderItenCount - 1)) {
|
|
|
-// newOrderRefund.setRefundAmount(Arith.add(newOrderRefund.getRefundAmount(), order.getFreightAmount()));
|
|
|
-// }
|
|
|
-// }
|
|
|
+ if ((Objects.equals(order.getHbOrderStatus(), OrderStatus.PADYED.value()) ||
|
|
|
+ Objects.equals(order.getHbOrderStatus(), OrderStatus.CONSIGNMENT.value())) && order.getFreightAmount() > 0) {
|
|
|
+ int orderItenCount = orderItemService.count(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, order.getOrderNumber()));
|
|
|
+ if (Objects.equals(orderRefunds.size(), orderItenCount - 1)) {
|
|
|
+ newOrderRefund.setRefundAmount(Arith.add(newOrderRefund.getRefundAmount(), order.getFreightAmount()));
|
|
|
+ newOrderRefund.setFreightAmount(order.getFreightAmount());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
newOrderRefund.setShopId(order.getShopId());
|
|
|
@@ -908,8 +910,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
newOrderRefund.setReturnMoneySts(rReturnMoneySts);
|
|
|
newOrderRefund.setApplyTime(new Date());
|
|
|
newOrderRefund.setUpdateTime(new Date());
|
|
|
+
|
|
|
+ //TODO 待完善 积分
|
|
|
log.info("生成退款单:{}", newOrderRefund);
|
|
|
|
|
|
+ List<OrderRefundAmountParam> sukList = Lists.newArrayList();
|
|
|
+ orderRefundParam.getOrderRefundSkuList().forEach(c -> {
|
|
|
+ OrderRefundAmountParam orderRefundAmountParam = new OrderRefundAmountParam();
|
|
|
+ orderRefundAmountParam.setSkuId(c.getSkuId());
|
|
|
+ orderRefundAmountParam.setProdCount(c.getProductCount());
|
|
|
+ sukList.add(orderRefundAmountParam);
|
|
|
+ });
|
|
|
+
|
|
|
// 生成退款单
|
|
|
orderRefundMapper.insert(newOrderRefund);
|
|
|
// 更新订单状态
|
|
|
@@ -943,6 +955,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
.eq(OrderRefund::getReturnMoneySts, 70)
|
|
|
);
|
|
|
if (ObjectUtils.isNotEmpty(orderRefund)) {
|
|
|
+ //退款的金额
|
|
|
+ BigDecimal refundActual = BigDecimal.ZERO;
|
|
|
+ //退款的积分
|
|
|
+ Long refundScore = 0L;
|
|
|
+ //过期的积分
|
|
|
+ Long refundExpiredScore = 0L;
|
|
|
+
|
|
|
Order order = orderMapper.selectById(orderRefund.getOrderId());
|
|
|
if (null == order) throw new GlobalException("该订单不支持退款");
|
|
|
//判定已完成的时间
|
|
|
@@ -965,6 +984,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
po.setRefundMoney((int) Arith.mul(Arith.add(order.getActualTotal(), order.getFreightAmount()), 100));
|
|
|
String s = wxProviderService.refundOrder(po);
|
|
|
System.out.println("微信退款结果:" + s);
|
|
|
+ refundActual = BigDecimal.valueOf(Arith.add(order.getActualTotal(), order.getFreightAmount()));
|
|
|
//优先退未过期的积分,退积分
|
|
|
List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
|
|
|
.eq(PointsRecord::getOrderNumber, order.getOrderNumber()).eq(PointsRecord::getPointsType, 2)
|
|
|
@@ -974,6 +994,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
.isNull(PointsRecord::getExpiryDate)
|
|
|
).orderByDesc(PointsRecord::getExpiryDate));
|
|
|
for (PointsRecord pointsRecord : pointsRecords) {
|
|
|
+ refundScore = (long) (refundScore + Arith.add(order.getActualTotal(), order.getFreightAmount()));
|
|
|
PointsRecord npr = new PointsRecord();
|
|
|
BeanUtils.copyProperties(pointsRecord, npr);
|
|
|
npr.setId(null);
|
|
|
@@ -985,6 +1006,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
npr.setCreationDate(new Date());
|
|
|
pointsRecordMapper.insert(npr);
|
|
|
}
|
|
|
+ refundExpiredScore = order.getOffsetPoints() - refundScore;
|
|
|
} else {//仅微信支付
|
|
|
RefundInfoPo po = new RefundInfoPo();
|
|
|
po.setOutTradeNo(orderSettlement.getPayNo());
|
|
|
@@ -992,6 +1014,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
po.setRefundMoney((int) Arith.mul(Arith.add(order.getTotal(), order.getFreightAmount()), 100));
|
|
|
String s = wxProviderService.refundOrder(po);
|
|
|
System.out.println("微信退款结果:" + s);
|
|
|
+ refundActual = BigDecimal.valueOf(Arith.add(order.getTotal(), order.getFreightAmount()));
|
|
|
}
|
|
|
} else {
|
|
|
//退,积分【优先退未过期的积分】
|
|
|
@@ -1012,8 +1035,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
Long l = pointsRecordMapper.statisticsPoint(pointsRecord.getUserId(), Math.toIntExact(pointsRecord.getChannelId()));
|
|
|
npr.setCurrentlyAvailablePoints(pointsRecord.getVariablePoints().add(BigDecimal.valueOf(l)));
|
|
|
npr.setCreationDate(new Date());
|
|
|
+ refundScore = (long) (refundScore + Arith.add(order.getActualTotal(), order.getFreightAmount()));
|
|
|
pointsRecordMapper.insert(npr);
|
|
|
}
|
|
|
+ refundExpiredScore = order.getOffsetPoints() - refundScore;
|
|
|
}
|
|
|
break;
|
|
|
case 2://2:单个物品退款
|
|
|
@@ -1041,8 +1066,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
totalRefundActual = Arith.add(totalRefundActual, productCount * orderItem.getPrice());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
//退积分
|
|
|
if (totalRefundScore > 0) {
|
|
|
+ refundScore = (long) totalRefundScore;
|
|
|
+ refundExpiredScore = order.getOffsetPoints() - refundScore;
|
|
|
for (PointsRecord pointsRecord : pointsRecords) {
|
|
|
//下单支付的金额
|
|
|
int variablePoints = pointsRecord.getVariablePoints().intValue();
|
|
|
@@ -1064,6 +1092,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
pointsRecordMapper.insert(npr);
|
|
|
if (variablePoints >= totalRefundScore) return;
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
//退钱
|
|
|
if (totalRefundActual > 0) {
|
|
|
@@ -1076,12 +1105,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
po.setRefundMoney((int) Arith.mul(totalRefundActual, 100));
|
|
|
String s = wxProviderService.refundOrder(po);
|
|
|
System.out.println("微信退款结果:" + s);
|
|
|
+ refundActual = BigDecimal.valueOf(totalRefundActual);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
order.setHbOrderStatus(OrderStatus.CLOSE.value());
|
|
|
orderMapper.updateById(order);
|
|
|
|
|
|
+ orderRefund.setRefundAmount(refundActual.doubleValue());
|
|
|
+ orderRefund.setOffsetPoints(refundScore);
|
|
|
+ orderRefund.setRefundExpiredScore(refundExpiredScore);
|
|
|
+ orderRefundMapper.updateById(orderRefund);
|
|
|
+
|
|
|
//生成待商家审核记录
|
|
|
OrderRefundRecord orderRefundRecord = new OrderRefundRecord();
|
|
|
orderRefundRecord.setOrderRefundId(orderRefund.getRefundId());
|
|
|
@@ -1095,7 +1130,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
|
|
|
@Override
|
|
|
public OrderRefundAmountDTO computeOrderRefundAmount(String orderNumber, List<OrderRefundAmountParam> suk) {
|
|
|
- return null;
|
|
|
+ BigDecimal orderRefundAmount = BigDecimal.ZERO;
|
|
|
+ Long offsetPoints = 0L;
|
|
|
+ Order order = orderMapper.selectOne(new LambdaQueryWrapper<Order>()
|
|
|
+ .eq(Order::getOrderNumber, orderNumber)
|
|
|
+ .eq(Order::getDeleteStatus, 0));
|
|
|
+ List<OrderItem> orderItems = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, orderNumber));
|
|
|
+ return OrderRefundAmountDTO.builder().orderRefundAmount(orderRefundAmount).offsetPoints(offsetPoints).build();
|
|
|
}
|
|
|
|
|
|
@Override
|