ipo
zyy
2026-01-08 4affbdf8938d321c0926bc2b1832dfc81c317ffa
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
package com.yami.trading.admin.task;
 
 
import cn.hutool.core.util.StrUtil;
import com.yami.trading.bean.future.domain.FuturesOrder;
import com.yami.trading.bean.model.User;
import com.yami.trading.bean.model.UserRecom;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.util.DateUtils;
import com.yami.trading.common.util.ThreadUtils;
import com.yami.trading.service.WalletService;
import com.yami.trading.service.future.FuturesOrderService;
import com.yami.trading.service.syspara.SysparaService;
import com.yami.trading.service.user.UserRecomService;
import com.yami.trading.service.user.UserService;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
 
@Service
public class FuturesOrderCreateRecomService {
    @Autowired
    protected FuturesOrderService futuresOrderService;
    @Autowired
    protected SysparaService sysparaService;
    @Autowired
    protected UserRecomService userRecomService;
    @Autowired
    protected UserService partyService;
    @Autowired
    protected WalletService walletService;
 
    /**
     * 计算推荐人收益
     */
    protected Map<String, BigDecimal> cacheRecomProfit = new ConcurrentHashMap<String, BigDecimal>();
 
    /**
     * 计算前一日购买产品的订单
     */
    public void computeRecom() {
        String futures_bonus_parameters = sysparaService.find("futures_bonus_parameters").getSvalue();
        if (StrUtil.isEmpty(futures_bonus_parameters)) {
            return;
        }
        cacheRecomProfit.clear();
        int pageSize = 1000;
        int pageNo = 1;
        String date = DateUtils.getDateStr(DateUtils.addDate(new Date(), -1));
        while (true) {
            List<FuturesOrder> list = futuresOrderService.queryByDate(pageNo, pageSize, date);
            if (list.isEmpty()) {
                break;
            }
            for (FuturesOrder order : list) {
                handleCacheRecom(order, futures_bonus_parameters);
            }
            pageNo++;
        }
        saveRecomProfit();
    }
 
    /**
     * 购买推荐奖励
     *
     * @param entity
     */
    public void handleCacheRecom(FuturesOrder entity, String futures_bonus_parameters) {
        List<UserRecom> list_parents = this.userRecomService.getParents(entity.getPartyId());
 
        if (CollectionUtils.isNotEmpty(list_parents)) {
            String[] futures_bonus_array = futures_bonus_parameters.split(",");
            int loop = 0;
            int loopMax = futures_bonus_array.length;
            for (int i = 0; i < list_parents.size(); i++) {
                if (loop >= loopMax) {
                    break;
                }
                User party_parent = this.partyService.getById(list_parents.get(i).getRecomUserId());
                if (!Constants.SECURITY_ROLE_MEMBER.equals(party_parent.getRoleName())) {
                    continue;
                }
                loop++;
                BigDecimal pip_amount = new BigDecimal(futures_bonus_array[loop - 1]);
                BigDecimal get_money = new BigDecimal(entity.getVolume() * pip_amount.doubleValue());
 
                if (cacheRecomProfit.containsKey(party_parent.getUserId())) {
                    cacheRecomProfit.put(party_parent.getUserId(),
                            cacheRecomProfit.get(party_parent.getUserId()).add(get_money));
                } else {
                    cacheRecomProfit.put(party_parent.getUserId().toString(), get_money);
                }
            }
 
        }
    }
 
    public void saveRecomProfit() {
        if (cacheRecomProfit.isEmpty()) {
            return;
        }
        for (Entry<String, BigDecimal> entry : cacheRecomProfit.entrySet()) {
            walletService.updateMoney("",entry.getKey(), entry.getValue(), BigDecimal.ZERO,
                    Constants.MONEYLOG_CONTENT_REWARD, Constants.WALLET, Constants.MONEYLOG_CONTENT_REWARD, "下级购买交割,佣金奖励");
            ThreadUtils.sleep(200);
        }
    }
 
 
}