wang 3 өдөр өмнө
parent
commit
487d798700

+ 3 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/app/dto/ApiOrderRefundDto.java

@@ -121,6 +121,9 @@ public class ApiOrderRefundDto {
     @ApiModelProperty("商品总额")
     private Double goodsTotal;
 
+    @ApiModelProperty("过期的积分")
+    private Long refundExpiredScore;;
+
     /*
 ac
     @ApiModelProperty("物流公司名称")

+ 2 - 1
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/OrderRefundDto.java

@@ -102,5 +102,6 @@ public class OrderRefundDto extends OrderRefund implements Serializable {
     private Long offsetPoints;
 
     private Double goodsTotal;
-
+    //过期的积分
+    private Long refundExpiredScore;
 }

+ 2 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderRefund.java

@@ -163,6 +163,8 @@ public class OrderRefund implements Serializable{
     private Double freightAmount;
 
     private Long offsetPoints;
+    //过期的积分
+    private Long refundExpiredScore;
 
     @TableField(exist = false)
     @ApiModelProperty(value = "退款商品详情")

+ 24 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderServiceImpl.java

@@ -868,7 +868,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 //            }
 
             // 待发货状态-最后一件商品进行退款,退款金额 =  商品金额 + 订单运费金额
-            if ((Objects.equals(order.getHbOrderStatus(), OrderStatus.PADYED.value())||
+            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)) {
@@ -945,6 +945,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("该订单不支持退款");
             //判定已完成的时间
@@ -967,6 +974,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)
@@ -976,6 +984,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);
@@ -987,6 +996,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());
@@ -994,6 +1004,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 {
                         //退,积分【优先退未过期的积分】
@@ -1014,8 +1025,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:单个物品退款
@@ -1043,8 +1056,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();
@@ -1066,6 +1082,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                             pointsRecordMapper.insert(npr);
                             if (variablePoints >= totalRefundScore) return;
                         }
+
                     }
                     //退钱
                     if (totalRefundActual > 0) {
@@ -1078,12 +1095,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());