更新会员成长值 不对
订单退款 全额 部分 问题
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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, "订单退款扣除赠送积分");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,13 +821,16 @@ 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) {
|
||||
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);
|
||||
@@ -832,13 +840,16 @@ public class PayServiceImpl implements PayService {
|
||||
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));
|
||||
"订单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);
|
||||
|
||||
}
|
||||
}, "订单id:{} 退款,积分返还处理失败", orderId);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user