|
|
@@ -421,9 +421,10 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
.eq("order_id", refundOrder.getOrderId()).eq("delete_flag",0));
|
|
|
// 1.查询订单信息 订单表 + 中间表
|
|
|
LifeUserOrder order = lifeUserOrderMapper.selectById(refundOrder.getOrderId());
|
|
|
+ Integer refundCouponAmount = refundOrder.getRefundCouponAmount();
|
|
|
// 待使用的券(可退款的券 || 退款失败的券 目前没做失败的券状态更新 暂时不加)
|
|
|
List<OrderCouponMiddle> orderCouponMiddles1 = orderCouponMiddles.stream().filter(orderCouponMiddle -> orderCouponMiddle.getStatus() == OrderStatusEnum.WAIT_USE.getStatus()).collect(Collectors.toList());
|
|
|
- if (orderCouponMiddles1.size() < refundOrder.getRefundCouponAmount()) {
|
|
|
+ if (orderCouponMiddles1.size() < refundCouponAmount) {
|
|
|
returnMap.put("fail", "退款券数不足");
|
|
|
return returnMap;
|
|
|
}
|
|
|
@@ -445,7 +446,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
boolean ifPartialRefund = false;
|
|
|
String PartialRefundCode = "";
|
|
|
// 只要本次退款不是全退都是部分退
|
|
|
- if (refundOrder.getRefundCouponAmount() != orderCouponMiddles.size()){
|
|
|
+ if (refundCouponAmount != orderCouponMiddles.size()){
|
|
|
ifPartialRefund = true;
|
|
|
PartialRefundCode = UniqueRandomNumGenerator.generateUniqueCode(12);
|
|
|
}
|
|
|
@@ -453,7 +454,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
String refundMessage = "";
|
|
|
|
|
|
// 更新的中间表id
|
|
|
- List<Integer> updateIds = orderCouponMiddles1.stream().limit(refundOrder.getRefundCouponAmount()).map(x -> x.getId()).collect(Collectors.toList());
|
|
|
+ List<Integer> updateIds = orderCouponMiddles1.stream().limit(refundCouponAmount).map(x -> x.getId()).collect(Collectors.toList());
|
|
|
if (result.equals("调用失败")) {
|
|
|
refundMessage = "编号为"+order.getOrderNo()+"的订单退款失败,请重新发起申请。";
|
|
|
// TODO 退款失败目前不做处理
|
|
|
@@ -479,8 +480,8 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
refundOrder.setPartialRefundCode(PartialRefundCode);
|
|
|
}
|
|
|
}
|
|
|
- // 更新数据(中间表数据+订单表数据:当已退款个数+当前退款个数=已使用的券数时,订单状态改为已退款)
|
|
|
- if (refundCouponCount + refundOrder.getRefundCouponAmount() == orderCouponMiddles.size()) {
|
|
|
+ // 更新总订单数据(中间表数据+订单表数据:当已退款个数+当前退款个数=已使用的券数时,订单状态改为已退款)
|
|
|
+ if (refundCouponCount + refundCouponAmount == orderCouponMiddles.size()) {
|
|
|
lifeUserOrderMapper.update(null,new UpdateWrapper<LifeUserOrder>().eq("id",order.getId())
|
|
|
.set("status",OrderStatusEnum.REFUND.getStatus())
|
|
|
.set("refund_time",now)
|
|
|
@@ -492,7 +493,7 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// 处理 quanId 为 null 的情况,例如日志记录
|
|
|
log.error("更新优惠券状态失败");
|
|
|
}
|
|
|
- } else if (refundCouponCount + refundOrder.getRefundCouponAmount() != orderCouponMiddles.size() && refundOrder.getRefundCouponAmount() == orderCouponMiddles1.size()) {
|
|
|
+ } else if (refundCouponCount + refundCouponAmount != orderCouponMiddles.size() && refundCouponAmount == orderCouponMiddles1.size()) {
|
|
|
// 累计退券个数+当前退券个数!=总个数 且 当前退券数量 = 可退券数
|
|
|
lifeUserOrderMapper.update(null,new UpdateWrapper<LifeUserOrder>().eq("id",order.getId())
|
|
|
.set("status",OrderStatusEnum.COMPLETE.getStatus())
|
|
|
@@ -526,26 +527,42 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
log.error("LifeUserOrderService requestRefund Stack={}", e);
|
|
|
}
|
|
|
}
|
|
|
- // 券核销完成后,退款的情况下,需要向 store_income_details_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);
|
|
|
-// }
|
|
|
+ // 退款后更新库存
|
|
|
+ Integer couponType = order.getCouponType();
|
|
|
+ OrderCouponMiddle orderCouponMiddle = orderCouponMiddleMapper.selectOne(new QueryWrapper<OrderCouponMiddle>().eq("order_id", refundOrder.getOrderId()).last("limit 1"));
|
|
|
+ Integer couponId = orderCouponMiddle.getCouponId();
|
|
|
+
|
|
|
+ restoreInventory(couponType, refundCouponAmount, couponId);
|
|
|
returnMap.put("success", refundMessage);
|
|
|
return returnMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 退款,取消订单时候,恢复库存
|
|
|
+ * @param couponType 类型 1-代金券,2-团购
|
|
|
+ * @param refundCouponAmount 团购券/代金券张数
|
|
|
+ * @param couponId 团购券/代金券id
|
|
|
+ */
|
|
|
+ private void restoreInventory(Integer couponType, Integer refundCouponAmount, Integer couponId) {
|
|
|
+ try{
|
|
|
+ if( CouponTypeEnum.COUPON.getCode() == couponType){
|
|
|
+ // 代金券信息
|
|
|
+ lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
|
|
|
+ .setSql("single_qty=single_qty+" + refundCouponAmount)
|
|
|
+ .eq(LifeCoupon::getId, couponId));
|
|
|
+ } else {
|
|
|
+ // 团购信息
|
|
|
+ lifeGroupBuyMainMapper.update(null, new LambdaUpdateWrapper<LifeGroupBuyMain>()
|
|
|
+ .setSql("inventory_num=inventory_num+" + refundCouponAmount)
|
|
|
+ .eq(LifeGroupBuyMain::getId, couponId));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("LifeUserOrderService,恢复团购券/代金券数量报错={}", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 退款检查
|
|
|
* @param refundOrder
|
|
|
* @return
|
|
|
@@ -714,8 +731,12 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
lifeDiscountCouponUserMapper.updateById(lifeDiscountCouponUser);
|
|
|
}
|
|
|
//3.根据购买数量增加中间关系 订单id+券编号 确定一条数据
|
|
|
- BigDecimal sumPrice = new BigDecimal(0);
|
|
|
- for (int i = 0; i < lifeUserOrderDto.getCount(); i++) {
|
|
|
+ int buyCount = lifeUserOrderDto.getCount();
|
|
|
+ BigDecimal totalPrice = new BigDecimal(lifeUserOrderDto.getFinalPrice());
|
|
|
+ BigDecimal countDecimal = new BigDecimal(buyCount);
|
|
|
+ BigDecimal perPrice = totalPrice.divide(countDecimal, 2, RoundingMode.DOWN);
|
|
|
+ BigDecimal lastPrice = totalPrice.subtract(perPrice.multiply(countDecimal.subtract(BigDecimal.ONE)));
|
|
|
+ for (int i = 0; i < buyCount; i++) {
|
|
|
String code = UniqueRandomNumGenerator.generateUniqueCode(12);
|
|
|
OrderCouponMiddle orderCouponMiddle = new OrderCouponMiddle();
|
|
|
// 订单id
|
|
|
@@ -725,29 +746,20 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
// 团购/代金券 code
|
|
|
orderCouponMiddle.setCouponCode(code);
|
|
|
// 团购/代金券价格
|
|
|
- if(i == lifeUserOrderDto.getCount() - 1){
|
|
|
- orderCouponMiddle.setPrice(new BigDecimal(lifeUserOrderDto.getFinalPrice()).subtract(sumPrice).setScale(2,RoundingMode.DOWN));
|
|
|
- } else {
|
|
|
- BigDecimal divide = new BigDecimal(lifeUserOrderDto.getFinalPrice()).divide(new BigDecimal(lifeUserOrderDto.getCount()), 2, RoundingMode.DOWN);
|
|
|
- orderCouponMiddle.setPrice(divide);
|
|
|
- sumPrice = sumPrice.add(divide);
|
|
|
- }
|
|
|
+ orderCouponMiddle.setPrice(i == buyCount - 1 ? lastPrice : perPrice);
|
|
|
// 订单状态
|
|
|
orderCouponMiddle.setStatus(0);
|
|
|
orderCouponMiddleService.save(orderCouponMiddle);
|
|
|
- // 使用时间
|
|
|
- // 退款时间
|
|
|
- // 删除标记
|
|
|
}
|
|
|
//4. 代金券/团购库存扣除 coupon_type 1 代金券 2团购
|
|
|
int successful = 0;
|
|
|
if(lifeUserOrderDto.getCouponType() == 2){
|
|
|
// 团购库存扣除
|
|
|
successful = lifeGroupBuyMainMapper.update(null, new UpdateWrapper<LifeGroupBuyMain>()
|
|
|
- .eq("id", lifeUserOrderDto.getCouponId()).setSql("inventory_num = inventory_num - " + lifeUserOrderDto.getCount()));
|
|
|
+ .eq("id", lifeUserOrderDto.getCouponId()).ge("inventory_num",lifeUserOrderDto.getCount()).setSql("inventory_num = inventory_num - " + lifeUserOrderDto.getCount()));
|
|
|
} else {
|
|
|
successful = lifeCouponMapper.update(null, new UpdateWrapper<LifeCoupon>()
|
|
|
- .eq("id", lifeUserOrderDto.getCouponId()).setSql("single_qty = single_qty - " + lifeUserOrderDto.getCount()));
|
|
|
+ .eq("id", lifeUserOrderDto.getCouponId()).ge("single_qty",lifeUserOrderDto.getCount()).setSql("single_qty = single_qty - " + lifeUserOrderDto.getCount()));
|
|
|
}
|
|
|
if(successful == 0){
|
|
|
log.error("库存不足");
|
|
|
@@ -799,18 +811,8 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
|
|
|
if (0 != updateNum && orderCouponMiddles.size() > 0) {
|
|
|
Integer couponId = orderCouponMiddles.get(0).getCouponId();
|
|
|
// 2.过期后更新库存
|
|
|
- if (1 == lifeUserOrder.getCouponType()) {
|
|
|
- // 代金券
|
|
|
- // 恢复库存
|
|
|
- lifeCouponMapper.update(null, new LambdaUpdateWrapper<LifeCoupon>()
|
|
|
- .setSql("single_qty=single_qty+" + updateNum)
|
|
|
- .eq(LifeCoupon::getId, couponId));
|
|
|
- } else {
|
|
|
- // 团购
|
|
|
- lifeGroupBuyMainMapper.update(null, new LambdaUpdateWrapper<LifeGroupBuyMain>()
|
|
|
- .setSql("inventory_num=inventory_num+" + updateNum)
|
|
|
- .eq(LifeGroupBuyMain::getId, couponId));
|
|
|
- }
|
|
|
+ Integer couponType = lifeUserOrder.getCouponType();
|
|
|
+ restoreInventory(couponType, updateNum, couponId);
|
|
|
} else {
|
|
|
log.error("取消失败,未查询到订单");
|
|
|
throw new RuntimeException("取消失败,未查询到订单");
|