package com.cyksj.web.controller.user; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cyksj.common.EnvCommonService; import com.cyksj.common.annotation.NoSubmit; import com.cyksj.common.exception.BusinessRuntimeException; import com.cyksj.dto.Result; import com.cyksj.enums.GatewayResponse; import com.cyksj.mapper.GoodsDonMapper; import com.cyksj.mapper.GoodsDonSkuMapper; import com.cyksj.mapper.UserMapper; import com.cyksj.mapper.manage.distribute.DistributeMoneyApplyMapper; import com.cyksj.mapper.manage.distribute.DistributePointsExchangeMoneyMapper; import com.cyksj.mapper.manage.distribute.DistributeWaitingSendPointsMapper; import com.cyksj.mapper.manage.distribute.UserDistributeMapper; import com.cyksj.model.entity.*; import com.cyksj.model.request.ApplyMoneyReq; import com.cyksj.model.views.*; import com.cyksj.web.util.StpUserUtil; import com.ejlchina.searcher.BeanSearcher; import com.ejlchina.searcher.SearchResult; import com.ejlchina.searcher.param.Operator; import com.ejlchina.searcher.util.MapUtils; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import java.util.Optional; /* *项目名: netflix *文件名: DistributePopularizeController *创建者: JavaZou *创建时间:2022/11/15 13:59 * 服务端-》我的分发推广controller */ @RestController @RequestMapping("/distribute/popularize") @RequiredArgsConstructor public class DistributePopularizeController { private final EnvCommonService envCommonService; private final UserMapper userMapper; private final BeanSearcher beanSearcher; private final GoodsDonMapper goodsDonMapper; private final GoodsDonSkuMapper goodsDonSkuMapper; private final DistributePointsExchangeMoneyMapper distributePointsExchangeMoneyMapper; private final DistributeMoneyApplyMapper distributeMoneyApplyMapper; private final UserDistributeMapper userDistributeMapper; private final DistributeWaitingSendPointsMapper distributeWaitingSendPointsMapper; /** * 推广订单明细 */ @GetMapping("/orders/detail") public Result> getOrdersView(HttpServletRequest request) { Long userId = StpUserUtil.getLoginIdAsLong(); SearchResult search = beanSearcher.search(DistributePopularizeOrdersView.class, MapUtils.flatBuilder(request.getParameterMap()) .field(DistributePopularizeOrdersView::getSharedId, userId) .build()); search.getDataList().forEach(data -> { GoodsDon goodsDon = goodsDonMapper.selectById(data.getGoodsId()); GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(data.getSkuId()); data.setGoodsTitle(goodsDon.getTitle()); data.setSpecVal(goodsDonSku.getSpecVal()); }); return GatewayResponse.SUCCESS.newBuilder().toResult(search); } /** * 提现明细 */ @GetMapping("/applyMoney/detail") public Result> getApplyMoneyView(HttpServletRequest request) { Long userId = StpUserUtil.getLoginIdAsLong(); SearchResult search = beanSearcher.search(DistributeMoneyApplyView.class, MapUtils.flatBuilder(request.getParameterMap()) .field(DistributeMoneyApplyView::getUserId, userId).op(Operator.Equal) .build()); return GatewayResponse.SUCCESS.newBuilder().toResult(search); } /** * 个人推广详情 */ @GetMapping("/get/detail") public Result getDetail() { Long userId = StpUserUtil.getLoginIdAsLong(); DistributePopularizeView distributePopularizeView = new DistributePopularizeView(); String domain = envCommonService.getHost(); // distributePopularizeView.setUrl(String.format("https://%s/8081/api/auth/weChat?url=https://%s/yinhe/web&sharedId=%s", domain, domain, userId)); distributePopularizeView.setUrl(String.format("https://%s/yinhe/web/login?sharedId=%s", domain, userId)); distributePopularizeView.setUrlCode(QrCodeUtil.generateAsBase64(distributePopularizeView.getUrl(), QrConfig.create(), "png")); User user = userMapper.selectById(userId); distributePopularizeView.setGotPoints(user.getPoints()); Number number = beanSearcher.searchCount(DistributeOrdersView.class, MapUtils.builder().field(DistributeOrdersView::getSharedId, userId).op(Operator.Equal).build()); distributePopularizeView.setDistributeOrders(number.intValue()); UserDistribute userDistribute = userDistributeMapper.selectOne(Wrappers.lambdaQuery(UserDistribute.class).eq(UserDistribute::getUserId, userId).select(UserDistribute::getId).last("limit 1")); if (userDistribute != null) { //是否是固定推广者 UserDistributeView userDistributeView = beanSearcher.searchFirst(UserDistributeView.class, MapUtils.builder() .field(UserDistributeView::getDistribute_id, userDistribute.getId()).op(Operator.Equal) .orderBy(UserDistributeView::getRate).desc() .build()); //最高平台比例 distributePopularizeView.setHighestRate(userDistributeView.getRate()); }else { GoodsDon goodsDon = goodsDonMapper.selectOne(Wrappers.lambdaQuery(GoodsDon.class).orderByDesc(GoodsDon::getRate).select(GoodsDon::getRate).last("limit 1")); distributePopularizeView.setHighestRate(goodsDon.getRate()); } List distributeWaitingSendPoints = distributeWaitingSendPointsMapper.selectList(Wrappers.lambdaQuery(DistributeWaitingSendPoints.class).eq(DistributeWaitingSendPoints::getSendStatus, DistributeWaitingSendPoints.Status.waiting).eq(DistributeWaitingSendPoints::getSharedId, userId).select(DistributeWaitingSendPoints::getPoints)); BigDecimal waitingPoints = BigDecimal.ZERO; if (!distributeWaitingSendPoints.isEmpty()) { Optional points = distributeWaitingSendPoints.stream().map(DistributeWaitingSendPoints::getPoints).reduce(BigDecimal::add); if (points.isPresent()) { waitingPoints = points.get(); } } distributePopularizeView.setWaitingSendPoints(waitingPoints); return GatewayResponse.SUCCESS.newBuilder().toResult(distributePopularizeView); } /** * 提现 */ @NoSubmit @PostMapping("/post/applyMoney") @Transactional(rollbackFor = Throwable.class) public Result applyMoney(@RequestBody ApplyMoneyReq applyMoneyReq) { Long userId = StpUserUtil.getLoginIdAsLong(); User user = userMapper.selectById(userId); if (user == null) { throw BusinessRuntimeException.getInstance("请先授权登录"); } if (ObjectUtil.hasEmpty(applyMoneyReq.getPhone(), applyMoneyReq.getRealName())) { throw BusinessRuntimeException.getInstance("必填项不能为空"); } if (!Validator.isMobile(applyMoneyReq.getPhone())) { throw BusinessRuntimeException.getInstance("请输入正确手机号"); } DistributePointsExchangeMoney distributePointsExchangeMoney = distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).orderByDesc(DistributePointsExchangeMoney::getPoints).last("limit 1")); BigDecimal minPoints = BigDecimal.valueOf(distributePointsExchangeMoney.getMinPoints()); BigDecimal min = BigDecimal.valueOf(distributePointsExchangeMoney.getPoints()); if (user.getPoints().compareTo(minPoints) < 0) { throw BusinessRuntimeException.getInstance("您当前积分未达到积分门槛,无法提现"); } //今日是否已提现 DistributeMoneyApply apply = distributeMoneyApplyMapper.selectOne(Wrappers.lambdaQuery(DistributeMoneyApply.class).eq(DistributeMoneyApply::getUserId, userId).between(DistributeMoneyApply::getCreatedTime, DateUtil.beginOfDay(DateTime.now()), DateUtil.endOfDay(DateTime.now())).last("limit 1")); if (apply != null) { throw BusinessRuntimeException.getInstance("今日已提现,请明日再进行操作"); } BigDecimal num = user.getPoints().divide(min, RoundingMode.DOWN); int points = min.multiply(num).intValue(); Integer update = userMapper.subPoints(user.getId(), points); if (update == 1) { DistributeMoneyApply distributeMoneyApply = new DistributeMoneyApply(); distributeMoneyApply.setUserId(userId); distributeMoneyApply.setPoints(points); distributeMoneyApply.setMoney(num.multiply(distributePointsExchangeMoney.getMoney())); distributeMoneyApply.setVerifyStatus(DistributeMoneyApply.Status.verifying); distributeMoneyApply.setPhone(applyMoneyReq.getPhone()); distributeMoneyApply.setRealName(applyMoneyReq.getRealName()); distributeMoneyApplyMapper.insert(distributeMoneyApply); return GatewayResponse.SUCCESS.newBuilder().toResult("申请提现成功,待客服审核打款"); } return GatewayResponse.SUCCESS.newBuilder().toResult("系统异常,请重新提交提现申请"); } /** * 获取积分兑换门槛 */ @GetMapping("/applyMoney/threshold") public Result getThreshold() { return GatewayResponse.SUCCESS.newBuilder().toResult(distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).last("limit 1"))); } }