fix
Helius
2021-07-23 bfb8d3b963f9653ac420b965f1eecadb887ca537
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
package com.xzx.gc.order.service;
 
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.text.StrBuilder;
import com.xzx.gc.common.constant.Constants;
import com.xzx.gc.common.constant.UserEnum;
import com.xzx.gc.common.utils.BusinessUtil;
import com.xzx.gc.common.utils.StringUtils;
import com.xzx.gc.entity.OtherUserInfo;
import com.xzx.gc.entity.RebateRule;
import com.xzx.gc.entity.RedPaperRule;
import com.xzx.gc.entity.UserInfo;
import com.xzx.gc.order.dto.RuleDto;
import com.xzx.gc.order.mapper.OrderMapper;
import com.xzx.gc.order.mapper.RebateRuleMapper;
import com.xzx.gc.order.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
 
@Service
@Transactional
@Slf4j
public class RuleService {
 
    @Autowired
    private RedPaperRuleService redPaperRuleService;
 
    @Autowired
    private OrderService orderService;
 
    @Autowired
    private RebateRuleService rebateRuleService;
 
 
    @Autowired
    private OtherUserService otherUserService;
 
    @Autowired
    private UserService userService;
    /**
     * 查询用户重量返利
     * @param userId
     * @param  checkFlag 检查参与用户是平台用户则弃掉
     * @return
     */
    public RuleDto findWeightRebate(String userId,boolean checkFlag,String partnerId){
        RuleDto ruleDto = new RuleDto();
        if(checkFlag){
            UserInfo byId = userService.findById(userId);
            if(byId!=null){
                String mobilePhone = byId.getMobilePhone();
                List<OtherUserInfo> byMobile = otherUserService.findByMobile(mobilePhone);
                if(CollUtil.isNotEmpty(byMobile)) {
                    return ruleDto;
                }
            }
        }
        RedPaperRule one = redPaperRuleService.getOne(UserEnum.重量返利规则.getValue(),partnerId);
        if (one != null) {
            ruleDto.setRuleId(one.getId());
            String s = changeProductType(one.getProductType());
            ruleDto.setProductType(s);
            List<RebateRule> rebateRules = rebateRuleService.findByRuleId(one.getId());
            ruleDto.setRebateRules(rebateRules);
        } else {
            log.warn("重量返利规则不存在");
        }
        return ruleDto;
    }
 
 
    /**
     * 查询用户阶梯返利
     * @param userId
     * @return
     */
    public RuleDto findStepRebate(String userId,boolean checkFlag,String partnerId){
        RuleDto ruleDto=new RuleDto();
        ruleDto.setScale(UserEnum.无返利.getValue());
        if(checkFlag){
            UserInfo byId = userService.findById(userId);
            if(byId!=null){
                String mobilePhone = byId.getMobilePhone();
                List<OtherUserInfo> byMobile = otherUserService.findByMobile(mobilePhone);
                if(CollUtil.isNotEmpty(byMobile)) {
                    return ruleDto;
                }
            }
        }
        RedPaperRule one = redPaperRuleService.getOne(UserEnum.阶梯返利规则.getValue(),partnerId);
        if(one!=null){
            ruleDto.setRuleId(one.getId());
            ruleDto.setConversionPerUnit(one.getConversionPerUnit());
            List<RebateRule> rebateRules = rebateRuleService.findByRuleId(one.getId());
            String rate=null;
            String minWeight=null;
            String minScale=null;
            if(CollUtil.isNotEmpty(rebateRules)){
                //sort升序
                List<RebateRule> collect = rebateRules.stream().sorted(Comparator.comparing(RebateRule::getSort)).collect(Collectors.toList());
                ruleDto.setRebateRules(collect);
                ruleDto.setMinScale(collect.get(0).getRate());
                ruleDto.setMinWeight(collect.get(0).getWeight());
                //用户以前下单的总重量
                BigDecimal sumWeight = orderService.findSumWeight(userId,one);
                ruleDto.setSumWeight(sumWeight);
 
                //从大到小
                rebateRules = rebateRules.stream().sorted(Comparator.comparing(RebateRule::getSort).reversed()).collect(Collectors.toList());
                for (RebateRule rebateRule : rebateRules) {
                    String weight = rebateRule.getWeight();
                    String rate1 = rebateRule.getRate();
                    if(sumWeight.compareTo(Convert.toBigDecimal(weight))>=0){
                        rate = rate1;
                        break;
                    }
                }
            }
 
            if(rate!=null){
                ruleDto.setScale(rate);
            }else{
                //无返利
                ruleDto.setMinScale(minScale);
                ruleDto.setMinWeight(minWeight);
            }
        }
        return ruleDto;
    }
 
    /**
     * 获取返利规则阶梯重量及返利
     * @return
     */
    public  List<RebateRule> getRebateRules(RedPaperRule one){
        List<RebateRule> rebateRules = rebateRuleService.findByRuleId(one.getId());
        if(CollUtil.isEmpty(rebateRules)) {
            rebateRules=new ArrayList<>();
        }
        return rebateRules;
    }
 
    /**
     * 将类型转换成itemType
     * @param productType
     * @return
     */
    public String changeProductType(String productType){
        String[] split = productType.split(",");
        StrBuilder strBuilder=StrBuilder.create();
        for (String s : split) {
            if("1".equals(s)){
                strBuilder.append(Constants.PAPER_WASTE_ITEM_TYPE).append(",");
            }else if("2".equals(s)){
                strBuilder.append(Constants.PAPER_MIX_ITEM_TYPE).append(",");
            }
        }
        return StringUtils.removeLast(strBuilder, ",");
    }
}