package com.cyksj.web.controller.user; 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.model.entity.*; import com.cyksj.model.views.DistributeMoneyApplyView; import com.cyksj.model.views.DistributeOrdersView; import com.cyksj.model.views.DistributePopularizeOrdersView; import com.cyksj.model.views.DistributePopularizeView; import com.cyksj.redis.RedisService; 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.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.math.RoundingMode; /* *项目名: 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 RedisService redisService; /** * 推广订单明细 */ @GetMapping("/orders/detail") public SearchResult getOrdersView() { Long userId = StpUserUtil.getLoginIdAsLong(); SearchResult search = beanSearcher.search(DistributePopularizeOrdersView.class, MapUtils.builder().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 search; } /** * 提现明细 */ @GetMapping("/applyMoney/detail") public SearchResult getApplyMoneyView() { return beanSearcher.search(DistributeMoneyApplyView.class, null); } /** * 个人推广详情 */ @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.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::getUserId, userId).op(Operator.Equal).build()); distributePopularizeView.setDistributeOrders(number.intValue()); return GatewayResponse.SUCCESS.newBuilder().toResult(distributePopularizeView); } /** * 提现 */ @NoSubmit @PostMapping("/post/applyMoney") @Transactional(rollbackFor = Throwable.class) public Result applyMoney() { Long userId = StpUserUtil.getLoginIdAsLong(); User user = userMapper.selectById(userId); if (user == null) { throw BusinessRuntimeException.getInstance("请先授权登录"); } DistributePointsExchangeMoney distributePointsExchangeMoney = distributePointsExchangeMoneyMapper.selectOne(Wrappers.lambdaQuery(DistributePointsExchangeMoney.class).orderByDesc(DistributePointsExchangeMoney::getPoints).last("limit 1")); BigDecimal min = BigDecimal.valueOf(distributePointsExchangeMoney.getPoints()); if (user.getPoints().compareTo(min) < 0) { 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); distributeMoneyApplyMapper.insert(distributeMoneyApply); return GatewayResponse.SUCCESS.newBuilder().toResult("申请提现成功,待客服审核打款"); } return GatewayResponse.SUCCESS.newBuilder().toResult("系统异常,请重新提交提现申请"); } }