admin
2020-05-20 98b1a0affd69bbe63223c21fdd2c404e8bedfccb
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
package com.yeshi.fanli.service.manger.money;
 
import java.math.BigDecimal;
import java.util.ArrayList;
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.money.TeamEincomeRecord;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.exception.ParamsException;
import com.yeshi.fanli.exception.money.TeamEincomeRecordException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.service.inter.money.TeamEincomeRecordService;
import com.yeshi.fanli.service.inter.money.UserMoneyService;
import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import com.yeshi.fanli.util.factory.money.TeamEincomeRecordFactory;
 
/**
 * 团队收益管理
 * @author Administrator
 *
 */
@Component
public class TeamEincomeManager {
 
    @Resource
    private TeamEincomeRecordService teamEincomeRecordService;
 
    @Resource
    private UserMoneyService userMoneyService;
 
    @Resource
    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
 
    /**
     * @throws ParamsException 
     * @throws TeamEincomeRecordException 
     * 添加团队奖金
     * @Title: addTeamReward
     * @Description: 
     * @param hongBaoList
     * @param uid 
     * void 返回类型
     * @throws
     */
    @Transactional(rollbackFor = Exception.class)
    public void addTeamReward(Long uid, Date preSendTime, BigDecimal money, int sourceType)
            throws TeamEincomeRecordException, ParamsException {
        String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd");
        TeamEincomeRecord record = TeamEincomeRecordFactory.createTeamReward(day, uid, money, sourceType, null);
        teamEincomeRecordService.addTeamEincomeRecord(record);
    }
 
    /**
     * 添加团队补贴
     * @Title: addTeamSubsidy
     * @Description: 
     * @param uid
     * @param taskKey 
     * void 返回类型
     * @throws
     */
    @Transactional(rollbackFor = Exception.class)
    public void addTeamSubsidy(Long uid, Date preSendTime, BigDecimal money, int sourceType)
            throws TeamEincomeRecordException, ParamsException {
        String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd");
        TeamEincomeRecord record = TeamEincomeRecordFactory.createTeamSubsidy(day, uid, money, sourceType, null);
        teamEincomeRecordService.addTeamEincomeRecord(record);
    }
 
    /**
     * 添加团队分红
     * @Title: addTeamDividents
     * @Description: 
     * @param uid
     * @param preSendTime 
     * void 返回类型
     * @throws
     */
    @Transactional(rollbackFor = Exception.class)
    public void addTeamDividents(Long uid, Date preSendTime, BigDecimal money)
            throws TeamEincomeRecordException, ParamsException {
        String day = TimeUtil.getGernalTime(preSendTime.getTime(), "yyyy-MM-dd");
        TeamEincomeRecord record = TeamEincomeRecordFactory.createTeamDividents(day, uid, money, null);
        teamEincomeRecordService.addTeamEincomeRecord(record);
    }
 
    /**
     * @throws UserMoneyDetailException 
     * 团队收益 到账到用户余额
     * @Title: addTOUserAccount
     * @Description: 
     * @param day
     * @param uid 
     * void 返回类型
     * @throws
     */
    @Transactional(rollbackFor = Exception.class)
    public void addTeamIncomeTOUserAccount(Date preSendTime, Long uid) throws UserMoneyDetailException {
 
        List<Integer> typeList = new ArrayList<>();
        typeList.add(TeamEincomeRecord.TYPE_TEAM_SUBSIDY);
        typeList.add(TeamEincomeRecord.TYPE_TEAM_REWARD);
 
        Date now = new Date();
        List<TeamEincomeRecord> list = teamEincomeRecordService.listCanRecieveRecord(preSendTime, uid, typeList);
        BigDecimal money = new BigDecimal(0);
        for (TeamEincomeRecord record : list) {
            record = teamEincomeRecordService.selectByPrimaryKeyForUpdate(record.getId());
            money = money.add(record.getMoney());
            teamEincomeRecordService.setRecieved(record.getId());
        }
 
        UserMoneyDetail detail = UserMoneyDetailFactory.createTeamReward(uid, money, preSendTime);
 
        userMoneyService.addUserMoney(uid, money, detail);
        // 发送消息
        BigDecimal balance = userMoneyService.getBalance(uid);
        userMoneyMsgNotificationService.teamReceive(uid, money, balance, now);
    }
 
    @Transactional(rollbackFor = Exception.class)
    public void addTeamDividentsTOUserAccount(Date preSendTime, Long uid) throws UserMoneyDetailException {
        List<Integer> typeList = new ArrayList<>();
        typeList.add(TeamEincomeRecord.TYPE_TEAM_DIVIDENTS);
        Date now = new Date();
        List<TeamEincomeRecord> list = teamEincomeRecordService.listCanRecieveRecord(preSendTime, uid, typeList);
        BigDecimal money = new BigDecimal(0);
        for (TeamEincomeRecord record : list) {
            record = teamEincomeRecordService.selectByPrimaryKeyForUpdate(record.getId());
            money = money.add(record.getMoney());
            teamEincomeRecordService.setRecieved(record.getId());
        }
 
        UserMoneyDetail detail = UserMoneyDetailFactory.createTeamDividents(uid, money, preSendTime);
 
        userMoneyService.addUserMoney(uid, money, detail);
        // 发送消息
        BigDecimal balance = userMoneyService.getBalance(uid);
        userMoneyMsgNotificationService.teamDividend(uid, money, balance, now);
    }
 
}