|
|
@@ -5,15 +5,14 @@ import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
-import com.cyksj.mapper.GoodsDonSkuMapper;
|
|
|
-import com.cyksj.mapper.GroupsMapper;
|
|
|
import com.cyksj.mapper.GroupsRelationMapper;
|
|
|
+import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper;
|
|
|
+import com.cyksj.mapper.manage.distribute.UserDistributeMapper;
|
|
|
import com.cyksj.mapper.vip.RefundVipOrderDonMapper;
|
|
|
import com.cyksj.mapper.vip.VipOrderDonMapper;
|
|
|
import com.cyksj.mapper.vip.VipUserMapper;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.request.OrderRefundReq;
|
|
|
-import com.cyksj.service.mange.MirrorUserCleatService;
|
|
|
import com.cyksj.service.mange.vip.CmsVipOrderService;
|
|
|
import com.cyksj.service.order.OrderRefundService;
|
|
|
import com.cyksj.service.relation.GroupRelationClearService;
|
|
|
@@ -23,6 +22,7 @@ import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Optional;
|
|
|
@@ -46,11 +46,7 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
|
|
|
|
|
|
private final GroupsRelationMapper relationMapper;
|
|
|
|
|
|
- private final GoodsDonSkuMapper skuMapper;
|
|
|
-
|
|
|
- private final GroupsMapper groupsMapper;
|
|
|
-
|
|
|
- private final MirrorUserCleatService mirrorUserCleatService;
|
|
|
+ private final DistributeWaitingSendPointsMapper distributeWaitingSendPointsMapper;
|
|
|
|
|
|
private final GroupRelationClearService groupRelationClearService;
|
|
|
|
|
|
@@ -58,6 +54,8 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
|
|
|
|
|
|
private final UserBindRelationService userBindRelationService;
|
|
|
|
|
|
+ private final UserDistributeMapper userDistributeMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public void refundOrders(OrderRefundReq refundReq) throws Exception {
|
|
|
VipOrderDon orderDon = vipOrderDonMapper.selectById(refundReq.getOrderId());
|
|
|
@@ -111,6 +109,67 @@ public class CmsVipOrderServiceImpl implements CmsVipOrderService {
|
|
|
clearVipMirrorUser(vipUser.getUserId(), subExpiryTime);
|
|
|
vipUserMapper.updateById(vipUser);
|
|
|
}
|
|
|
+ if (StrUtil.isNotBlank(refundType) && !refundType.equals(VipOrderDon.Type.BALANCE.getType())) {
|
|
|
+ //分销提成积分扣除
|
|
|
+ deductVipDsPoints(orderDon);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void deductVipDsPoints(VipOrderDon orderDon) {
|
|
|
+ if (orderDon.getIsDistribute()) {
|
|
|
+ DistributeWaitingSendPoints distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectOne(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getOrderId, orderDon.getId()).eq(DistributeWaitingSendPoints::getIsVip, Boolean.TRUE).last("limit 1"));
|
|
|
+ if (distributeWaitingSendPoints != null) {
|
|
|
+ BigDecimal money = orderDon.getMoney();
|
|
|
+ BigDecimal refundMoney = orderDon.getRefundMoney();
|
|
|
+ //已发送 发送中 部分 全额退款
|
|
|
+ DistributeWaitingSendPoints.Status sendStatus = distributeWaitingSendPoints.getSendStatus();
|
|
|
+ BigDecimal points = distributeWaitingSendPoints.getPoints();
|
|
|
+ if (sendStatus == DistributeWaitingSendPoints.Status.waiting) {
|
|
|
+ Integer thisGoodsRate = distributeWaitingSendPoints.getRate();
|
|
|
+ if (thisGoodsRate == null || thisGoodsRate == 0) {
|
|
|
+ thisGoodsRate = Optional.ofNullable(userDistributeMapper.getDistributeGoodsRateByUidAndGid(orderDon.getUserId(), orderDon.getGoodsId())).orElse(0);
|
|
|
+ }
|
|
|
+ if (thisGoodsRate > 0) {
|
|
|
+ BigDecimal refundRate = refundMoney.divide(money, 2, RoundingMode.DOWN);
|
|
|
+ //退掉比例的提成
|
|
|
+ BigDecimal needSubPoints = points.multiply(refundRate);
|
|
|
+ distributeWaitingSendPoints.setRefundPoints(needSubPoints);
|
|
|
+ //剩余积分
|
|
|
+ BigDecimal remainPoints = points.subtract(needSubPoints);
|
|
|
+ distributeWaitingSendPoints.setPoints(remainPoints);
|
|
|
+ //原先获取积分也扣除
|
|
|
+ if (distributeWaitingSendPoints.getOriPoints().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ BigDecimal oriNeedSubPoints = distributeWaitingSendPoints.getOriPoints().multiply(refundRate);
|
|
|
+ distributeWaitingSendPoints.setOriPoints(distributeWaitingSendPoints.getOriPoints().subtract(oriNeedSubPoints));
|
|
|
+ }
|
|
|
+ distributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
|
|
|
+ }
|
|
|
+ } else if (sendStatus == DistributeWaitingSendPoints.Status.success) {
|
|
|
+ //已发送的提成 部分退款 全额退款 需要扣除用户积分
|
|
|
+ //扣除固定推广者积分
|
|
|
+ Integer thisGoodsRate = distributeWaitingSendPoints.getRate();
|
|
|
+ if (thisGoodsRate == null || thisGoodsRate == 0) {
|
|
|
+ thisGoodsRate = Optional.ofNullable(userDistributeMapper.getDistributeGoodsRateByUidAndGid(orderDon.getUserId(), orderDon.getGoodsId())).orElse(0);
|
|
|
+ }
|
|
|
+ if (thisGoodsRate > 0) {
|
|
|
+ BigDecimal refundRate = refundMoney.divide(money, 2, RoundingMode.DOWN);
|
|
|
+ //退掉比例的提成
|
|
|
+ BigDecimal needSubPoints = points.multiply(refundRate);
|
|
|
+ userBenefitsService.deductDistributePoints(orderDon.getId(), distributeWaitingSendPoints.getSharedId(), needSubPoints);
|
|
|
+ //部分退款
|
|
|
+ distributeWaitingSendPoints.setRefundPoints(needSubPoints);
|
|
|
+ distributeWaitingSendPoints.setPoints(points.subtract(needSubPoints));
|
|
|
+ //原先获取积分也扣除
|
|
|
+ if (distributeWaitingSendPoints.getOriPoints().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ BigDecimal oriNeedSubPoints = distributeWaitingSendPoints.getOriPoints().multiply(refundRate);
|
|
|
+ distributeWaitingSendPoints.setOriPoints(distributeWaitingSendPoints.getOriPoints().subtract(oriNeedSubPoints));
|
|
|
+ }
|
|
|
+ distributeWaitingSendPointsMapper.updateById(distributeWaitingSendPoints);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void recordRefundOrder(VipOrderDon orderDon, String outRefundNo, BigDecimal refundMoney, String operator, String chatImg, String refundType) {
|