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.UserInfoService; 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 UserInfoService userInfoService; @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) { UserInfo user = userInfoService.get(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(user.getWxUser() == 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 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) { UserInfo user = userInfoService.get(uid); if (user.getWxUser() == null) { return JsonUtil.loadFalseResult("尚未绑定微信"); } WXUserInfo wxUserInfo = wxUserInfoService.get(user.getWxUser().getId()); 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(""); } }