admin
2020-11-09 2147d023563a7c9d05d97547c00d6b0162c0644c
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
package com.yeshi.fanli.service.manger.order;
 
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
 
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.money.TeamRewardDebt;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.ParamsException;
import com.yeshi.fanli.exception.money.TeamEincomeRecordException;
import com.yeshi.fanli.exception.money.TeamRewardDebtException;
import com.yeshi.fanli.exception.order.TaoBaoOrderException;
import com.yeshi.fanli.service.inter.money.TeamRewardDebtService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.order.tb.TaoBaoWeiQuanOrderService;
import com.yeshi.fanli.service.manger.money.TeamEincomeManager;
import com.yeshi.fanli.util.Constant;
 
/**
 * 团队分红管理
 * @author Administrator
 *
 */
@Component
public class TeamRewardManager {
 
    @Resource
    private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
    @Resource
    private TaoBaoOrderService taoBaoOrderService;
    @Resource
    private HongBaoOrderService hongBaoOrderService;
    @Resource
    private HongBaoV2Service hongBaoV2Service;
 
    @Resource
    private CommonOrderService commonOrderService;
 
    @Resource
    private TeamRewardDebtService teamRewardDebtService;
 
    @Resource
    private TeamEincomeManager teamEincomeManager;
 
    @Transactional(rollbackFor = Exception.class)
    public void addToEincome(Long uid, Date date, BigDecimal money, int sourceType)
            throws TeamEincomeRecordException, ParamsException, TeamRewardDebtException {
        // 查询是否有欠账
        BigDecimal debtMoney = teamRewardDebtService.getTotalDebtMoney(uid, date);
        // 有欠账
        if (debtMoney.compareTo(new BigDecimal(0)) > 0)
            money = teamRewardDebtService.repayDebtByUid(uid, date, money);
 
        teamEincomeManager.addTeamReward(uid, date, money, sourceType);
    }
 
    /**
     * 处理邀请维权
     * @param orderNo
     * @param sourceType
     * @param tradeId
     * @throws TaoBaoOrderException
     * @throws TeamRewardDebtException
     */
    public void weiQuan(String orderNo, int sourceType, String tradeId)
            throws TaoBaoOrderException, TeamRewardDebtException {
        if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {// 只处理淘宝的维权
            TaoBaoWeiQuanOrder taoBaoWeiQuanOrder = taoBaoWeiQuanOrderService.selectByTradeId(tradeId);
 
            // 只处理维权成功
            if (!taoBaoWeiQuanOrder.getState().startsWith("维权成功"))
                return;
            TaoBaoOrder taoBaoOrder = taoBaoOrderService.selectByTradeId(tradeId);
            if (taoBaoOrder == null)
                return;
 
            if (taoBaoOrder.getSettlement() == null)
                throw new TaoBaoOrderException(1, "订单未更新");
 
            CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(sourceType, tradeId);
            if (commonOrder == null)
                return;
 
            // 查询订单
            HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrder.getId());
 
            if (hongBaoOrder == null)
                return;
 
            List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
 
            if (children == null)
                return;
 
            for (HongBaoV2 child : children) {
                if (child != null)//
                {
                    if (child.getState() == HongBaoV2.STATE_SHIXIAO)
                        continue;
 
                    BigDecimal drawBackMoney = computeDrawBackMoney(taoBaoOrder.getSettlement(),
                            taoBaoWeiQuanOrder.getMoney(), child.getMoney());
                    if (drawBackMoney.compareTo(new BigDecimal(0)) <= 0)
                        continue;
 
                    TeamRewardDebt oldDebt = teamRewardDebtService.selectBySourceId(child.getId());
                    if (oldDebt != null)
                        continue;
 
                    if (child.getPreGetTime() == null) {
                        throw new TeamRewardDebtException(2, "订单还未更新");
                    }
 
                    TeamRewardDebt debt = new TeamRewardDebt();
                    debt.setCreateTime(new Date());
                    debt.setOriginMoney(drawBackMoney);
                    debt.setSourceId(child.getId());
                    debt.setTradeId(tradeId);
                    debt.setSourceType(sourceType);
                    debt.setUid(child.getUserInfo().getId());
                    debt.setEstimatePayTime(child.getPreGetTime());
                    teamRewardDebtService.addDebt(debt);
                }
            }
        }
    }
 
    private BigDecimal computeDrawBackMoney(BigDecimal settlement, BigDecimal wqMoney, BigDecimal hongBaoMoney) {
        BigDecimal money = (hongBaoMoney.multiply(wqMoney)).divide(settlement, 2, BigDecimal.ROUND_UP);
        if (money.compareTo(hongBaoMoney) > 0)
            money = hongBaoMoney;
        return money;
    }
 
}