zxl
6 天以前 2701dca44e1972afe9956ced2f949d2998c1bb4b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package cn.lili.modules.order.cart.render.impl;
 
import cn.lili.cache.Cache;
import cn.lili.cache.CachePrefix;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.modules.distribution.entity.dos.DistributionGoods;
import cn.lili.modules.distribution.service.DistributionGoodsService;
import cn.lili.modules.order.cart.entity.dto.TradeDTO;
import cn.lili.modules.order.cart.entity.enums.RenderStepEnums;
import cn.lili.modules.order.cart.entity.vo.CartSkuVO;
import cn.lili.modules.order.cart.render.CartRenderStep;
import com.xkcoding.http.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
import java.util.stream.Collectors;
 
/**
 * 分销佣金计算
 *
 * @author Chopper
 * @since 2020-07-02 14:47
 */
@Service
public class DistributionPriceRender implements CartRenderStep {
    /**
     * 缓存
     */
    @Autowired
    private Cache cache;
 
    @Autowired
    private DistributionGoodsService distributionGoodsService;
 
    @Override
    public RenderStepEnums step() {
        return RenderStepEnums.DISTRIBUTION;
    }
 
    @Override
    public void render(TradeDTO tradeDTO) {
        this.renderDistribution(tradeDTO);
    }
 
    /**
     * 渲染分销佣金
     *
     * @param tradeDTO
     */
    private void renderDistribution(TradeDTO tradeDTO) {
 
        //如果存在分销员
        String distributionId = (String) cache.get(CachePrefix.DISTRIBUTION.getPrefix() + "_" + tradeDTO.getMemberId());
        if (StringUtil.isEmpty(distributionId)) {
            return;
        }
        //循环订单商品列表,如果是分销商品则计算商品佣金
        tradeDTO.setDistributionId(distributionId);
 
        List<String> skuIds = tradeDTO.getCheckedSkuList().stream().map(cartSkuVO -> {
            return cartSkuVO.getGoodsSku().getId();
        }).collect(Collectors.toList());
        //是否包含分销商品
        List<DistributionGoods> distributionGoods = distributionGoodsService.distributionGoods(skuIds);
        if (distributionGoods != null && !distributionGoods.isEmpty()) {
            distributionGoods.forEach(dg -> tradeDTO.getCheckedSkuList().forEach(cartSkuVO -> {
                if (cartSkuVO.getGoodsSku().getId().equals(dg.getSkuId())) {
                    cartSkuVO.setDistributionGoods(dg);
                }
            }));
        }
 
        for (CartSkuVO cartSkuVO : tradeDTO.getCheckedSkuList()) {
            if (cartSkuVO.getDistributionGoods() != null) {
                cartSkuVO.getPriceDetailDTO().setDistributionCommission(CurrencyUtil.mul(cartSkuVO.getNum(), cartSkuVO.getDistributionGoods().getCommission()));
            }
        }
 
    }
}