|
@@ -397,33 +397,85 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
return orders.stream().map(LifeUserOrder::getQuanCode).collect(Collectors.toList());
|
|
return orders.stream().map(LifeUserOrder::getQuanCode).collect(Collectors.toList());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Map<String, Object> requestRefund(LifeRefundOrder refundOrder) {
|
|
public Map<String, Object> requestRefund(LifeRefundOrder refundOrder) {
|
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
|
- LifeUserOrder order = lifeUserOrderMapper.selectById(refundOrder.getOrderId());
|
|
|
|
|
- if (StringUtils.isEmpty(refundOrder.getAmount()) || Double.parseDouble(refundOrder.getAmount()) == 0) {
|
|
|
|
|
|
|
+ if (StringUtils.isEmpty(refundOrder.getRefundMoney()) || Double.parseDouble(refundOrder.getRefundMoney()) == 0) {
|
|
|
returnMap.put("fail", "无需退款或退款金额为0");
|
|
returnMap.put("fail", "无需退款或退款金额为0");
|
|
|
return returnMap;
|
|
return returnMap;
|
|
|
}
|
|
}
|
|
|
- String result = alipayTradeRefund.processRefund(order.getOrderNo(), refundOrder.getAmount(), refundOrder.getDescription());
|
|
|
|
|
- if (result.equals("调用失败")) {
|
|
|
|
|
- returnMap.put("success", "退款失败");
|
|
|
|
|
|
|
+ List<OrderCouponMiddle> orderCouponMiddles = orderCouponMiddleMapper.selectList(new QueryWrapper<OrderCouponMiddle>()
|
|
|
|
|
+ .eq("order_id", refundOrder.getOrderId()).eq("delete_flag",0));
|
|
|
|
|
+ // 待使用的券(可退款的券)
|
|
|
|
|
+ List<OrderCouponMiddle> orderCouponMiddles1 = orderCouponMiddles.stream().filter(orderCouponMiddle -> orderCouponMiddle.getStatus() == 1).collect(Collectors.toList());
|
|
|
|
|
+ if (orderCouponMiddles1.size() < refundOrder.getRefundCouponAmount()) {
|
|
|
|
|
+ returnMap.put("fail", "退款券数不足");
|
|
|
|
|
+ return returnMap;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 判断累计退款金额
|
|
|
|
|
+ BigDecimal totalRefundMoney = new BigDecimal(refundOrder.getRefundMoney());
|
|
|
|
|
+ // 累计退款个数
|
|
|
|
|
+ int refundCouponCount = 0;
|
|
|
|
|
+ List<LifeRefundOrder> lifeRefundOrderList = lifeRefundOrderMapper.selectList(new QueryWrapper<LifeRefundOrder>().eq("order_id", refundOrder.getOrderId())
|
|
|
|
|
+ .eq("status", 0));
|
|
|
|
|
+ for (LifeRefundOrder lifeRefundOrder : lifeRefundOrderList) {
|
|
|
|
|
+ totalRefundMoney = totalRefundMoney.add(new BigDecimal(lifeRefundOrder.getRefundMoney()));
|
|
|
|
|
+ refundCouponCount += lifeRefundOrder.getRefundCouponAmount();
|
|
|
|
|
+ }
|
|
|
|
|
+ if(totalRefundMoney.compareTo(new BigDecimal(refundOrder.getRefundMoney()))>0){
|
|
|
|
|
+ returnMap.put("fail","退款金额(已退+当前退)不能大于订单金额");
|
|
|
return returnMap;
|
|
return returnMap;
|
|
|
}
|
|
}
|
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
|
- order.setStatus(4);
|
|
|
|
|
- order.setUpdatedTime(now);
|
|
|
|
|
- order.setRefundTime(now);
|
|
|
|
|
- lifeUserOrderMapper.updateById(order);
|
|
|
|
|
- refundOrder.setApplicationTime(now);
|
|
|
|
|
- refundOrder.setRefundTime(now);
|
|
|
|
|
|
|
+ LifeUserOrder order = lifeUserOrderMapper.selectById(refundOrder.getOrderId());
|
|
|
|
|
+ String result = alipayTradeRefund.processRefund(order.getOrderNo(), refundOrder.getRefundMoney(), refundOrder.getDescription());
|
|
|
|
|
+ String refundMessage = "";
|
|
|
|
|
+
|
|
|
|
|
+ // 更新的中间表id
|
|
|
|
|
+ List<Integer> updateIds = orderCouponMiddles1.stream().limit(refundOrder.getRefundCouponAmount()).map(x -> x.getId()).collect(Collectors.toList());
|
|
|
|
|
+ if (result.equals("调用失败")) {
|
|
|
|
|
+ refundMessage = "退款失败";
|
|
|
|
|
+ orderCouponMiddleMapper.update(null,new UpdateWrapper<OrderCouponMiddle>().in("id",updateIds)
|
|
|
|
|
+ .set("status",OrderStatusEnum.REFUND_FAILED.getStatus())
|
|
|
|
|
+ .set("refund_time",now)
|
|
|
|
|
+ .set("refund_reason",refundOrder.getReason()));
|
|
|
|
|
+ // 退款记录
|
|
|
|
|
+ refundOrder.setApplicationTime(now);
|
|
|
|
|
+ refundOrder.setRefundTime(now);
|
|
|
|
|
+ refundOrder.setStatus(1);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ refundMessage = "退款成功";
|
|
|
|
|
+ orderCouponMiddleMapper.update(null,new UpdateWrapper<OrderCouponMiddle>().in("id",updateIds)
|
|
|
|
|
+ .set("status",OrderStatusEnum.REFUND.getStatus())
|
|
|
|
|
+ .set("refund_time",now)
|
|
|
|
|
+ .set("refund_reason",refundOrder.getReason()));
|
|
|
|
|
+ // 退款记录
|
|
|
|
|
+ refundOrder.setApplicationTime(now);
|
|
|
|
|
+ refundOrder.setRefundTime(now);
|
|
|
|
|
+ refundOrder.setStatus(0);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 更新数据(中间表数据+订单表数据:当已退款个数+当前退款个数=已使用的券数时,订单状态改为已退款)
|
|
|
|
|
+ if (refundCouponCount + refundOrder.getRefundCouponAmount() == orderCouponMiddles.size()) {
|
|
|
|
|
+ lifeUserOrderMapper.update(null,new UpdateWrapper<LifeUserOrder>().eq("id",order.getId())
|
|
|
|
|
+ .set("status",OrderStatusEnum.REFUND.getStatus()));
|
|
|
|
|
+ if (null != order.getQuanId()) {
|
|
|
|
|
+ lifeDiscountCouponUserMapper.update(null,new UpdateWrapper<LifeDiscountCouponUser>().eq("id",order.getQuanId())
|
|
|
|
|
+ .set("status",DiscountCouponEnum.WAITING_USED.getValue()).set("use_time",null));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 处理 quanId 为 null 的情况,例如日志记录
|
|
|
|
|
+ log.error("更新优惠券状态失败");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 中间表数据更新
|
|
|
|
|
+ returnMap.put("success", refundMessage);
|
|
|
// 将退款记录插入到数据库中
|
|
// 将退款记录插入到数据库中
|
|
|
if (lifeRefundOrderMapper.insert(refundOrder) > 0) {
|
|
if (lifeRefundOrderMapper.insert(refundOrder) > 0) {
|
|
|
- returnMap.put("success", "退款成功");
|
|
|
|
|
// 发送通知
|
|
// 发送通知
|
|
|
LifeNotice lifeMessage = new LifeNotice();
|
|
LifeNotice lifeMessage = new LifeNotice();
|
|
|
LifeUser lifeUser = lifeUserMapper.selectById(order.getUserId());
|
|
LifeUser lifeUser = lifeUserMapper.selectById(order.getUserId());
|
|
|
lifeMessage.setReceiverId("user_" + lifeUser.getUserPhone());
|
|
lifeMessage.setReceiverId("user_" + lifeUser.getUserPhone());
|
|
|
- String text = "您的编号为" + order.getOrderNo() + "的订单退款成功了";
|
|
|
|
|
|
|
+ String text = "您的编号为" + order.getOrderNo() + "的订单"+refundMessage;
|
|
|
lifeMessage.setContext(text);
|
|
lifeMessage.setContext(text);
|
|
|
lifeMessage.setSenderId("system");
|
|
lifeMessage.setSenderId("system");
|
|
|
lifeMessage.setIsRead(0);
|
|
lifeMessage.setIsRead(0);
|
|
@@ -431,20 +483,20 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
lifeNoticeMapper.insert(lifeMessage);
|
|
lifeNoticeMapper.insert(lifeMessage);
|
|
|
}
|
|
}
|
|
|
// 券核销完成后,退款的情况下,需要向 store_income_details_record 表插入一条记录
|
|
// 券核销完成后,退款的情况下,需要向 store_income_details_record 表插入一条记录
|
|
|
- if (null != refundOrder.getStoreId()) {
|
|
|
|
|
- BigDecimal amounts = new BigDecimal(refundOrder.getAmount()).multiply(new BigDecimal(100));
|
|
|
|
|
- BigDecimal commission = amounts.multiply(new BigDecimal(0.04)).setScale(0, RoundingMode.HALF_UP);
|
|
|
|
|
- BigDecimal money = amounts.subtract(commission);
|
|
|
|
|
-
|
|
|
|
|
- StoreIncomeDetailsRecord record = new StoreIncomeDetailsRecord();
|
|
|
|
|
- record.setStoreId(refundOrder.getStoreId());
|
|
|
|
|
- record.setUserOrderId(Integer.parseInt(refundOrder.getOrderId()));
|
|
|
|
|
- record.setIncomeType(Integer.parseInt(refundOrder.getQuanType()));
|
|
|
|
|
- record.setBusinessId(Integer.parseInt(refundOrder.getQuanId()));
|
|
|
|
|
- record.setCommission(-commission.intValue());
|
|
|
|
|
- record.setMoney(-money.intValue());
|
|
|
|
|
- storeIncomeDetailsRecordMapper.insert(record);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+// if (null != refundOrder.getStoreId()) {
|
|
|
|
|
+// BigDecimal amounts = new BigDecimal(refundOrder.getRefundMoney()).multiply(new BigDecimal(100));
|
|
|
|
|
+// BigDecimal commission = amounts.multiply(new BigDecimal(0.04)).setScale(0, RoundingMode.HALF_UP);
|
|
|
|
|
+// BigDecimal money = amounts.subtract(commission);
|
|
|
|
|
+//
|
|
|
|
|
+// StoreIncomeDetailsRecord record = new StoreIncomeDetailsRecord();
|
|
|
|
|
+// record.setStoreId(refundOrder.getStoreId());
|
|
|
|
|
+// record.setUserOrderId(Integer.parseInt(refundOrder.getOrderId()));
|
|
|
|
|
+// record.setIncomeType(Integer.parseInt(refundOrder.getQuanType()));
|
|
|
|
|
+// record.setBusinessId(Integer.parseInt(refundOrder.getQuanId()));
|
|
|
|
|
+// record.setCommission(-commission.intValue());
|
|
|
|
|
+// record.setMoney(-money.intValue());
|
|
|
|
|
+// storeIncomeDetailsRecordMapper.insert(record);
|
|
|
|
|
+// }
|
|
|
return returnMap;
|
|
return returnMap;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -456,7 +508,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
returnMap.put("reason", "当前订单状态不是待消费");
|
|
returnMap.put("reason", "当前订单状态不是待消费");
|
|
|
return returnMap;
|
|
return returnMap;
|
|
|
}
|
|
}
|
|
|
- if (Double.parseDouble(order.getFinalPrice()) < Double.parseDouble(refundOrder.getAmount())) {
|
|
|
|
|
|
|
+ if (Double.parseDouble(order.getFinalPrice()) < Double.parseDouble(refundOrder.getRefundMoney())) {
|
|
|
returnMap.put("success", "不可退款");
|
|
returnMap.put("success", "不可退款");
|
|
|
returnMap.put("reason", "退款金额大于实付款");
|
|
returnMap.put("reason", "退款金额大于实付款");
|
|
|
return returnMap;
|
|
return returnMap;
|
|
@@ -903,7 +955,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// 库存 inventory_num
|
|
// 库存 inventory_num
|
|
|
stockQty = lifeGroupBuyMain.getInventoryNum();
|
|
stockQty = lifeGroupBuyMain.getInventoryNum();
|
|
|
endTime = lifeGroupBuyMain.getEndTime();
|
|
endTime = lifeGroupBuyMain.getEndTime();
|
|
|
- } else if (1 == CouponTypeEnum.COUPON.getCode()) {
|
|
|
|
|
|
|
+ } else if (couponType == CouponTypeEnum.COUPON.getCode()) {
|
|
|
// 代金券
|
|
// 代金券
|
|
|
LifeCoupon lifeCoupon = lifeCouponMapper.selectById(couponId);
|
|
LifeCoupon lifeCoupon = lifeCouponMapper.selectById(couponId);
|
|
|
status = lifeCoupon.getStatus();
|
|
status = lifeCoupon.getStatus();
|
|
@@ -912,7 +964,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// 已购数量
|
|
// 已购数量
|
|
|
buyCount = orderCouponMiddleMapper.selectCount(new QueryWrapper<OrderCouponMiddle>().eq("coupon_id", couponId).notIn("status", OrderStatusEnum.CANCEL.getStatus(), OrderStatusEnum.REFUND.getStatus())
|
|
buyCount = orderCouponMiddleMapper.selectCount(new QueryWrapper<OrderCouponMiddle>().eq("coupon_id", couponId).notIn("status", OrderStatusEnum.CANCEL.getStatus(), OrderStatusEnum.REFUND.getStatus())
|
|
|
.inSql("order_id", "select order_id from life_user_order where user_id = " + userId + " and store_id = " + storeId));
|
|
.inSql("order_id", "select order_id from life_user_order where user_id = " + userId + " and store_id = " + storeId));
|
|
|
- stockQty = lifeCoupon.getStockQty();
|
|
|
|
|
|
|
+ stockQty = lifeCoupon.getSingleQty();
|
|
|
endTime = lifeCoupon.getEndDate();
|
|
endTime = lifeCoupon.getEndDate();
|
|
|
} else {
|
|
} else {
|
|
|
log.error("buyCouponCheck-团购/代金券类型错误");
|
|
log.error("buyCouponCheck-团购/代金券类型错误");
|
|
@@ -959,6 +1011,8 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
returnMap.put("reason", "活动已结束");
|
|
returnMap.put("reason", "活动已结束");
|
|
|
return returnMap;
|
|
return returnMap;
|
|
|
}
|
|
}
|
|
|
|
|
+ returnMap.put("success", true);
|
|
|
|
|
+ returnMap.put("reason", "可以支付");
|
|
|
return returnMap;
|
|
return returnMap;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|