|
|
@@ -40,6 +40,7 @@ import com.yami.shop.bean.param.*;
|
|
|
import com.yami.shop.common.config.Constant;
|
|
|
import com.yami.shop.common.exception.GlobalException;
|
|
|
import com.yami.shop.common.util.Arith;
|
|
|
+import com.yami.shop.common.util.Json;
|
|
|
import com.yami.shop.common.util.PageAdapter;
|
|
|
import com.yami.shop.common.util.PageParam;
|
|
|
import com.yami.shop.dao.*;
|
|
|
@@ -960,8 +961,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
//退款的积分
|
|
|
Long refundScore = 0L;
|
|
|
//过期的积分
|
|
|
- Long refundExpiredScore = 0L;
|
|
|
-
|
|
|
+ long refundExpiredScore = 0L;
|
|
|
+ //退款总积分
|
|
|
+ Long refundOffsetPoints=0L;
|
|
|
Order order = orderMapper.selectById(orderRefund.getOrderId());
|
|
|
if (null == order) throw new GlobalException("该订单不支持退款");
|
|
|
//判定已完成的时间
|
|
|
@@ -1060,22 +1062,33 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
order.setRefundStatus(3);
|
|
|
List<OrderRefundSku> orderRefundSkus = orderRefundSkuMapper.selectList(new LambdaQueryWrapper<OrderRefundSku>()
|
|
|
.eq(OrderRefundSku::getOrderRefundId, orderRefund.getRefundId()));
|
|
|
- List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
|
|
|
- .eq(PointsRecord::getOrderNumber, order.getOrderNumber())
|
|
|
- .eq(PointsRecord::getPointsType, 2)
|
|
|
- .and(wrapper -> wrapper
|
|
|
- .gt(PointsRecord::getExpiryDate, LocalDateTime.now())
|
|
|
- .or()
|
|
|
- .isNull(PointsRecord::getExpiryDate)
|
|
|
- ).orderByDesc(PointsRecord::getExpiryDate));
|
|
|
+ List<PointsRecord> pointsRecords = pointsRecordMapper.findByOrderNumber(order.getOrderNumber(), 2);
|
|
|
+ List<OrderRefund> orderRefundList = orderRefundMapper.findByOrderNumber(order.getOrderNumber(),70);
|
|
|
+
|
|
|
+ for (OrderRefund refund : orderRefundList) {
|
|
|
+ refundOffsetPoints += refund.getOffsetPoints();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+// pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
|
|
|
+// .eq(PointsRecord::getOrderNumber, order.getOrderNumber())
|
|
|
+// .eq(PointsRecord::getPointsType, 2)
|
|
|
+// .and(wrapper -> wrapper
|
|
|
+//// .gt(PointsRecord::getExpiryDate, LocalDateTime.now())
|
|
|
+//// .or()
|
|
|
+// .isNull(PointsRecord::getExpiryDate)
|
|
|
+// ).orderByDesc(PointsRecord::getExpiryDate));
|
|
|
//TODO (int) Arith.mul(order.getFreightAmount(), 100),加在这里就是每次部分退单都要减掉,有可能会出现退的积分比下单总积分少。少的值恰好为一次运费
|
|
|
- int totalRefundScore = -(int) Arith.mul(order.getFreightAmount(), 100);//需要退的总积分,先把运费剔除掉
|
|
|
+ int totalRefundScore = 0;//需要退款的金额,部分退款时不需要退运费。
|
|
|
+ int freightAmountScore = -(int) Arith.mul(order.getFreightAmount(), 100);//需要退的总积分,先把运费剔除掉
|
|
|
double totalRefundActual = 0.0;//需要退的总金额
|
|
|
+ int shoppingScore= 0;
|
|
|
for (OrderRefundSku refundSkus : orderRefundSkus) {
|
|
|
Integer productCount = refundSkus.getProductCount();//退款的数量
|
|
|
OrderItem orderItem = orderItemMapper.selectById(refundSkus.getOrderItemId());
|
|
|
Double actualTotal = orderItem.getActualTotal();//付的钱
|
|
|
Integer useScore = orderItem.getUseScore();//使用的总积分
|
|
|
+ shoppingScore = useScore +freightAmountScore;//商品的总金额积分
|
|
|
if (useScore > 0) {
|
|
|
//退的积分不一定等于下单的数量
|
|
|
totalRefundScore = (int) (totalRefundScore + Arith.mul(productCount * orderItem.getPrice(), 100));
|
|
|
@@ -1088,7 +1101,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
//退积分
|
|
|
if (totalRefundScore > 0) {
|
|
|
refundScore = (long) totalRefundScore;
|
|
|
- refundExpiredScore = order.getOffsetPoints() - refundScore;
|
|
|
for (PointsRecord pointsRecord : pointsRecords) {
|
|
|
//下单支付的金额
|
|
|
int variablePoints = pointsRecord.getVariablePoints().intValue();//574
|
|
|
@@ -1100,23 +1112,35 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
if (null == l) {
|
|
|
l = 0L;
|
|
|
}
|
|
|
- if (null != pointsRecord.getVariablePoints()) {
|
|
|
- npr.setCurrentlyAvailablePoints(pointsRecord.getVariablePoints().add(BigDecimal.valueOf(l)));
|
|
|
+ if (pointsRecord.getExpiryStatus()==1){//当过期状态等于1时才进行变更可用金额 否则不变更
|
|
|
+ if (null != pointsRecord.getVariablePoints()) {
|
|
|
+ npr.setCurrentlyAvailablePoints(pointsRecord.getVariablePoints().add(BigDecimal.valueOf(l)));
|
|
|
+ } else {
|
|
|
+ npr.setCurrentlyAvailablePoints(BigDecimal.valueOf(0.0).add(BigDecimal.valueOf(l)));
|
|
|
+ }
|
|
|
} else {
|
|
|
npr.setCurrentlyAvailablePoints(BigDecimal.valueOf(0.0).add(BigDecimal.valueOf(l)));
|
|
|
}
|
|
|
+
|
|
|
npr.setCreationDate(new Date());
|
|
|
//574>188
|
|
|
if (variablePoints < totalRefundScore) {//下单金额全退
|
|
|
npr.setPoints(pointsRecord.getVariablePoints());
|
|
|
npr.setVariablePoints(BigDecimal.valueOf(0));
|
|
|
+
|
|
|
totalRefundScore -= variablePoints;
|
|
|
} else {//574>188,应退188
|
|
|
npr.setPoints(BigDecimal.valueOf(totalRefundScore));
|
|
|
npr.setVariablePoints(BigDecimal.valueOf(0));
|
|
|
+ totalRefundScore=0;
|
|
|
+ }
|
|
|
+ if (pointsRecord.getExpiryStatus()==2){
|
|
|
+ refundExpiredScore += totalRefundScore;
|
|
|
}
|
|
|
pointsRecordMapper.insert(npr);
|
|
|
- if (variablePoints >= totalRefundScore) return;
|
|
|
+ if (totalRefundScore==0 && shoppingScore>=refundOffsetPoints) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|