admin
2022-04-21 2464548977f4720bc8fceeb5d999c1a3852c2d10
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
170
171
172
173
174
175
176
177
178
179
180
181
182
package com.yeshi.makemoney.app.controller.client.api;
 
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.ks.lib.common.exception.ParamsException;
import com.yeshi.makemoney.app.dto.money.ExtractConfig;
import com.yeshi.makemoney.app.entity.config.SystemConfigKey;
import com.yeshi.makemoney.app.entity.money.Extract;
import com.yeshi.makemoney.app.entity.money.ExtractPayType;
import com.yeshi.makemoney.app.entity.user.UserInfo;
import com.yeshi.makemoney.app.entity.user.WXUserInfo;
import com.yeshi.makemoney.app.exception.money.ExtractException;
import com.yeshi.makemoney.app.exception.money.UserExtractMoneyLimitException;
import com.yeshi.makemoney.app.exception.money.UserMoneyBalanceException;
import com.yeshi.makemoney.app.service.inter.config.SystemConfigService;
import com.yeshi.makemoney.app.service.inter.money.ExtractService;
import com.yeshi.makemoney.app.service.inter.money.UserExtractMoneyLimitService;
import com.yeshi.makemoney.app.service.inter.money.UserMoneyService;
import com.yeshi.makemoney.app.service.inter.user.WXUserInfoService;
import com.yeshi.makemoney.app.utils.ApiCodeConstant;
import com.yeshi.makemoney.app.utils.Constant;
import com.yeshi.makemoney.app.utils.annotation.UserLogin;
import com.yeshi.makemoney.app.vo.AcceptData;
import com.yeshi.makemoney.app.vo.user.ExtractDenominationVO;
import com.yeshi.makemoney.app.vo.user.ExtractInfoVO;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.yeshi.utils.BigDecimalUtil;
import org.yeshi.utils.IPUtil;
import org.yeshi.utils.JsonUtil;
import org.yeshi.utils.StringUtil;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
 
/**
 * @author hxh
 * @title: ConfigController
 * @description: 提现接口
 * @date 2021/11/16 17:37
 */
@Controller
@RequestMapping("api/v1/extract")
public class ExtractController {
    @Resource
    private UserMoneyService userMoneyService;
 
    @Resource
    private WXUserInfoService wxUserInfoService;
 
    @Resource
    private ExtractService extractService;
 
    @Resource
    private UserExtractMoneyLimitService userExtractMoneyLimitService;
 
    private   Gson gson = JsonUtil.getConvertBigDecimalToStringBuilder(new GsonBuilder()).create();
 
    /**
     * @return java.lang.String
     * @author hxh
     * @description 提现信息(包括余额,提现中的资金,是否绑定微信)
     * @date 13:15 2021/12/2
     * @param: acceptData
     **/
    @UserLogin(uid = "#uid")
    @RequestMapping("getExtractInfo")
    @ResponseBody
    public String getExtractInfo(AcceptData acceptData, Long uid) {
        ExtractInfoVO vo = new ExtractInfoVO();
        vo.setBalance(userMoneyService.getBalance(uid).setScale(2));
        BigDecimal extracting = extractService.getExtractingMoney(uid);
        if (extracting.compareTo(new BigDecimal(0)) > 0) {
            vo.setExtracting(extracting.setScale(2).toString());
        }
        vo.setNeedBindWX(wxUserInfoService.selectByUid(uid) == null);
        return JsonUtil.loadTrueResult(gson.toJson(vo));
    }
 
    /**
     * @return java.lang.String
     * @author hxh
     * @description 获取提现面额
     * @date 17:46 2022/4/20
     * @param: acceptData
     * @param: uid
     **/
    @UserLogin(uid = "#uid")
    @RequestMapping("getExtractDenominationList")
    @ResponseBody
    public String getExtractDenominationList(AcceptData acceptData, Long uid) {
        ExtractConfig config = extractService.getExtractConfig(acceptData.getSystem());
        boolean isNewer = false;
        long count = extractService.countByMaxMoney(uid, Constant.EXTRACT_LITTLE_MONEY_LIMIT, Arrays.asList(new Integer[]{Extract.STATE_NOT_PROCESS, Extract.STATE_PROCESSING, Extract.STATE_PASS}), null);
        if (config.getNewerLittleMoneyNum() > count) {
            //有新用户机会
            isNewer = true;
        }
 
        List<ExtractDenominationVO> voList = new ArrayList<>();
        for (BigDecimal money : config.getExtractMoneyList()) {
            ExtractDenominationVO vo = new ExtractDenominationVO();
            vo.setMoney(BigDecimalUtil.getWithNoZera(money));
            if (money.compareTo(Constant.EXTRACT_LITTLE_MONEY_LIMIT) < 0 && isNewer) {
                vo.setTag("新用户福利");
            }
            voList.add(vo);
        }
 
        JSONObject data = new JSONObject();
        data.put("list", gson.toJson(voList));
        return JsonUtil.loadTrueResult(data);
    }
 
    @UserLogin(uid = "#uid")
    @RequestMapping("extract")
    @ResponseBody
    public String extract(AcceptData acceptData, Long uid, BigDecimal money, HttpServletRequest request) {
        WXUserInfo wxUserInfo = wxUserInfoService.selectByUid(uid);
        if (wxUserInfo == null) {
            return JsonUtil.loadFalseResult("尚未绑定微信");
        }
 
        Extract extract = new Extract();
        extract.setUser(new UserInfo(uid));
        extract.setIp(IPUtil.getRemotIP(request) + ":" + request.getRemotePort());
        extract.setMoney(money);
        extract.setType(ExtractPayType.wx);
        extract.setAccount(wxUserInfo.getOpenId());
 
        try {
            extractService.addExtract(extract);
        } catch (ParamsException e) {
            return JsonUtil.loadFalseResult(e.getMessage());
        } catch (ExtractException e) {
            e.printStackTrace();
            if (e.getCode() == ExtractException.CODE_MONEY_LIMIT) {
                return JsonUtil.loadFalseResult(e.getMessage());
            } else if (e.getCode() == ExtractException.CODE_LITTLE_MONEY_LIMIT) {
                return JsonUtil.loadFalseResult(ApiCodeConstant.CODE_NEED_WATCH_REWARD_VIDEO, "小金额提现机会已使用完");
            } else {
                return JsonUtil.loadFalseResult("未知错误,请稍后再试");
            }
        } catch (UserMoneyBalanceException e) {
            return JsonUtil.loadFalseResult("账户余额不足");
        }
 
        return JsonUtil.loadTrueResult("");
    }
 
 
    /**
     * @return java.lang.String
     * @author hxh
     * @description 增加小金额提现的次数限制
     * @date 18:26 2022/4/20
     * @param: acceptData
     * @param: uid
     **/
    @UserLogin(uid = "#uid")
    @RequestMapping("addLittleMoneyExtractTimes")
    @ResponseBody
    public String addLittleMoneyExtractTimes(AcceptData acceptData, Long uid) {
        try {
            userExtractMoneyLimitService.addLittleMoneyLimit(uid, 1, new Date());
        } catch (UserExtractMoneyLimitException e) {
            e.printStackTrace();
            return JsonUtil.loadFalseResult("增加次数出错");
        }
 
        return JsonUtil.loadTrueResult("");
    }
 
 
}