更新会员成长值 不对

订单退款 全额 部分 问题
This commit is contained in:
2025-12-25 18:02:31 +08:00
parent c6102dd4b4
commit d70546f55e
6 changed files with 92 additions and 20 deletions

View File

@@ -17,4 +17,9 @@ public interface MkPointsConfigService extends IService<MkPointsConfig> {
*
*/
void consumeAwardPoints(ShopUser shopUser, OrderInfo orderInfo);
/**
* 订单退款成功,通过计算 给用户赠送积分
*/
void removeConsumeAwardPoints(Long shopId, Long userId, Long orderId, String orderNo);
}

View File

@@ -48,4 +48,9 @@ public interface MkPointsUserService extends IService<MkPointsUser> {
*/
Long alterPoints(Long userId, Long shopUserId, @NotNull Long shopId, @NotNull PointsConstant floatType,
@NotNull Integer points, Long sourceId, @NotBlank String reason);
/**
* 订单退款 赠送的积分 扣除
*/
void removePointByOrder(Long shopId, Long userId, Long orderId, String orderNo, String reason);
}

View File

@@ -65,4 +65,9 @@ public class MkPointsConfigServiceImpl extends ServiceImpl<MkPointsConfigMapper,
mkPointsUserService.alterPoints(null, shopUser.getId(), orderInfo.getShopId(), PointsConstant.ADD,
awardPoints.intValue(), orderInfo.getId(), StrUtil.format("消费¥{}送{}积分", payAmount, awardPoints.intValue()));
}
@Override
public void removeConsumeAwardPoints(Long shopId, Long userId, Long orderId, String orderNo) {
mkPointsUserService.removePointByOrder(shopId, userId, orderId, orderNo, "订单退款扣除赠送积分");
}
}

View File

@@ -168,4 +168,49 @@ public class MkPointsUserServiceImpl extends ServiceImpl<MkPointsUserMapper, MkP
acUserMsgService.addUserMsg(msg);
return record.getId();
}
@Override
@Transactional
public void removePointByOrder(Long shopId, Long userId, Long orderId, String orderNo, String reason) {
MkPointsUser pointsUser = getPointsUser(shopId, null, userId);
MkPointsUserRecord one = pointsUserRecordService.getOne(query()
.eq(MkPointsUserRecord::getMkPointsUserId, pointsUser.getId())
.eq(MkPointsUserRecord::getShopId, shopId)
.eq(MkPointsUserRecord::getSourceId, orderId.toString())
.eq(MkPointsUserRecord::getFloatType, PointsConstant.ADD.getValue())
.orderBy(MkPointsUserRecord::getId, true)
);
if (one == null) {
return;
}
Long floatPoints = Math.abs(one.getFloatPoints());
pointsUser.setPointBalance(pointsUser.getPointBalance() - floatPoints);
saveOrUpdate(pointsUser);
MkPointsUserRecord record = MkPointsUserRecord.builder()
.mkPointsUserId(pointsUser.getId())
.shopId(pointsUser.getShopId())
.shopUserId(pointsUser.getShopUserId())
.floatType(PointsConstant.SUB.getValue())
.floatPoints(floatPoints)
.balancePoints(pointsUser.getPointBalance())
.sourceId(orderId.toString())
.content(reason)
.build();
boolean save = pointsUserRecordService.save(record);
if (!save) {
throw new CzgException("积分操作失败,积分记录保存失败");
}
AcUserMsg msg = new AcUserMsg()
.setUserId(pointsUser.getUserId())
.setShopId(shopId)
.setSourceId(orderId)
.setSourceType("order")
.setType("points")
.setReadStatus(0)
.setTitle("积分扣除")
.setContent(StrUtil.format("订单退款积分扣除提醒:{} 积分已扣除,订单号:{}", floatPoints, orderNo));
acUserMsgService.addUserMsg(msg);
}
}

View File

@@ -120,12 +120,12 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
break;
case "ORDER":
conditionMap.put("ORDER", orderInfoService.count(query().eq(OrderInfo::getShopId, shopId).eq(OrderInfo::getUserId, shopUserInfo.getUserId())
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode())) >= Integer.parseInt(item.getValue()));
.eq(OrderInfo::getStatus, OrderStatusEnums.DONE.getCode())) >= Integer.parseInt(item.getValue()));
break;
case "COST_AMOUNT":
conditionMap.put("COST_AMOUNT", orderInfoService.getOneAs(query().select("IFNULL(sum(pay_amount), 0) as total_amount ").eq(OrderInfo::getShopId, shopId).eq(OrderInfo::getUserId, shopUserInfo.getUserId())
.notIn(OrderInfo::getStatus, OrderStatusEnums.UNPAID.getCode(), OrderStatusEnums.CANCELLED.getCode()), BigDecimal.class)
.eq(OrderInfo::getStatus, OrderStatusEnums.DONE.getCode()), BigDecimal.class)
.compareTo(new BigDecimal(item.getValue())) >= 0);
break;
@@ -309,6 +309,7 @@ public class TbMemberConfigServiceImpl extends ServiceImpl<TbMemberConfigMapper,
return false;
}
ShopUser upShopUser = new ShopUser();
upShopUser.setId(shopUser.getId());
if (shopUser.getExperience() == null) {
upShopUser.setExperience(0L);
}

View File

@@ -126,6 +126,8 @@ public class PayServiceImpl implements PayService {
private MkPointsUserService mkPointsUserService;
@Resource
private MkConsumeCashbackService consumeCashbackService;
@Resource
private MkPointsConfigService pointsConfigService;
private final BigDecimal MONEY_RATE = new BigDecimal("100");
@@ -686,6 +688,10 @@ public class PayServiceImpl implements PayService {
if (orderInfo.getStatus().equals(OrderStatusEnums.CANCELLED.getCode())) {
throw new CzgException("订单已过期不可退单");
}
boolean isFirstRefund = true;
if (orderInfo.getRefundAmount().compareTo(BigDecimal.ZERO) != 0) {
isFirstRefund = false;
}
ShopInfo shopInfo = shopInfoService.getById(orderInfo.getShopId());
Map<String, BigDecimal> returnProMap = new HashMap<>();
boolean isPay = true;
@@ -754,7 +760,6 @@ public class PayServiceImpl implements PayService {
}
} else {
orderInfo.setStatus(OrderStatusEnums.REFUND.getCode());
// ssss
List<OrderDetail> orderDetails = orderDetailService.queryChain()
.select(OrderDetail::getId, OrderDetail::getProductId, OrderDetail::getNum, OrderDetail::getReturnNum, OrderDetail::getPackAmount, OrderDetail::getReturnNum)
.eq(OrderDetail::getOrderId, orderInfo.getId())
@@ -816,29 +821,35 @@ public class PayServiceImpl implements PayService {
if (!returnProMap.isEmpty()) {
rabbitPublisher.sendOrderRefundMsg(JSONObject.toJSONString(Map.of("orderId", orderInfo.getId(), "returnProMap", returnProMap)));
}
refundOrderAfter(orderInfo.getId(), orderInfo.getShopId(), orderInfo.getUserId(), orderInfo.getOrderNo(), orderInfo.getPointsNum());
refundOrderAfter(orderInfo.getId(), orderInfo.getShopId(), orderInfo.getUserId(), orderInfo.getOrderNo(),
orderInfo.getPointsNum(), isFirstRefund, orderInfo.getStatus().equals(OrderStatusEnums.REFUND.getCode()));
return CzgResult.success();
}
//触发订单退款时 后续处理
@Async
public void refundOrderAfter(@NonNull Long orderId, @NonNull Long shopId, Long userId, String orderNo, Integer pointsNum) {
// 退款分销还原
FunUtils.safeRunVoid(() -> distributionUserService.refund(orderId, orderNo),
"订单id:{} 退款,分销处理失败", orderId);
if (userId == null) {
return;
}
FunUtils.safeRunVoid(() -> consumerCouponService.removeConsumerCoupon(shopId, userId, orderId),
"订单id:{} 退款,消费赠券回撤处理失败", orderId);
FunUtils.safeRunVoid(() -> consumeCashbackService.removeCashback(shopId, userId, orderId, orderNo),
"订单id:{} 退款,消费返现处理失败", orderId);
FunUtils.safeRunVoid(() -> {
if (pointsNum != null && pointsNum > 0) {
mkPointsUserService.alterPoints(userId, null, shopId, PointsConstant.ADD,
pointsNum, orderId, StrUtil.format("订单退款返还{}积分", pointsNum));
public void refundOrderAfter(@NonNull Long orderId, @NonNull Long shopId, Long userId, String orderNo,
Integer pointsNum, boolean isFirstRefund, boolean isAllRefund) {
if (isFirstRefund) {
// 退款分销还原
FunUtils.safeRunVoid(() -> distributionUserService.refund(orderId, orderNo),
"订单id:{} 退款,分销处理失败", orderId);
if (userId == null) {
return;
}
}, "订单id:{} 退款,积分返还处理失败", orderId);
FunUtils.safeRunVoid(() -> consumerCouponService.removeConsumerCoupon(shopId, userId, orderId),
"订单id:{} 退款,消费赠券回撤处理失败", orderId);
FunUtils.safeRunVoid(() -> consumeCashbackService.removeCashback(shopId, userId, orderId, orderNo),
"订单id:{} 退款,消费返现扣除处理失败", orderId);
FunUtils.safeRunVoid(() -> pointsConfigService.removeConsumeAwardPoints(shopId, userId, orderId, orderNo),
"订单id:{} 退款,赠送积分扣除失败", orderId);
}
if (isAllRefund && userId != null && pointsNum != null && pointsNum > 0) {
FunUtils.safeRunVoid(() -> mkPointsUserService.alterPoints(userId, null, shopId, PointsConstant.ADD,
pointsNum, orderId, StrUtil.format("订单退款返还{}积分", pointsNum)),
"订单id:{} 退款,赠送积分扣除失败", orderId);
}
}
@Override