ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/VipSetting.java
@@ -55,6 +55,10 @@ @TableField("vip_withdrawal_min_amount") private BigDecimal vipWithdrawalMinAmount; @ApiModelProperty(value = "提现手续费") @TableField("vip_withdrawal_fee") private BigDecimal vipWithdrawalFee; @ApiModelProperty(value = "积分转赠权限 1开0关") @TableField("vip_gift_role") private Integer vipGiftRole; ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WalletController.java
@@ -5,18 +5,20 @@ import com.ruoyi.account.api.model.BalanceChangeRecord; import com.ruoyi.account.service.AppUserService; import com.ruoyi.account.service.BalanceChangeRecordService; import com.ruoyi.account.service.VipSettingService; import com.ruoyi.account.service.WalletService; import com.ruoyi.account.vo.WalletVO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.order.feignClient.RemoteOrderGoodsClient; import com.ruoyi.order.model.Order; import com.ruoyi.other.api.domain.VipSetting; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import com.ruoyi.order.model.Order; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -24,7 +26,10 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.time.*; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; import java.util.List; import java.util.stream.Collectors; @@ -42,6 +47,8 @@ private RemoteOrderGoodsClient remoteOrderGoodsClient; @Resource private AppUserService appUserService; @Resource private VipSettingService vipSettingService; /** * 钱包详情 @@ -50,7 +57,9 @@ @ApiOperation(value = "钱包详情", notes = "钱包详情") public R<WalletVO> detail() { LoginUser loginUserApplet = tokenService.getLoginUserApplet(); VipSetting vipSetting = vipSettingService.getVipSettingByUserId(loginUserApplet.getUserid()); WalletVO walletVO = walletService.getWalletByUserId(loginUserApplet.getUserid()); walletVO.setVipWithdrawalFee(vipSetting.getVipWithdrawalFee()); return R.ok(walletVO); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipSettingService.java
New file @@ -0,0 +1,10 @@ package com.ruoyi.account.service; import com.ruoyi.other.api.domain.VipSetting; public interface VipSettingService { VipSetting getVipSettingById(Integer id); VipSetting getVipSettingByUserId(Long appUserId); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipSettingServiceImpl.java
New file @@ -0,0 +1,40 @@ package com.ruoyi.account.service.impl; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.service.VipSettingService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.other.api.domain.VipSetting; import com.ruoyi.other.api.feignClient.RemoteVipSettingClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class VipSettingServiceImpl implements VipSettingService { @Resource private RemoteVipSettingClient remoteVipSettingClient; @Resource private AppUserClient appUserClient; @Override public VipSetting getVipSettingById(Integer id) { R<VipSetting> vipSettingById = remoteVipSettingClient.getVipSettingById(id); if (!R.isSuccess(vipSettingById)){ throw new ServiceException("会员等级获取失败"); } return vipSettingById.getData(); } @Override public VipSetting getVipSettingByUserId(Long appUserId) { AppUser appUser = appUserClient.getAppUserById(appUserId); if(null == appUser){ throw new ServiceException("用户不存在"); } return getVipSettingById(appUser.getVipId()); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/WithdrawalRequestsServiceImpl.java
@@ -3,19 +3,23 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.account.api.model.AppUser; import com.ruoyi.account.api.model.WithdrawalRequests; import com.ruoyi.account.dto.WithdrawalRequestsDTO; import com.ruoyi.account.mapper.WithdrawalRequestsMapper; import com.ruoyi.account.api.model.WithdrawalRequests; import com.ruoyi.account.service.VipSettingService; import com.ruoyi.account.service.WithdrawalRequestsService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.other.api.domain.VipSetting; import com.ruoyi.system.api.model.LoginUser; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; /** * <p> @@ -31,17 +35,40 @@ private TokenService tokenService; @Resource private AppUserClient appUserClient; @Resource private VipSettingService vipSettingService; public static final BigDecimal MAX_WITHDRAWAL_AMOUNT = new BigDecimal("200"); public static final BigDecimal VIP_WITHDRAWAL_FEE_DENOMINATOR = new BigDecimal("100"); @Override public void withdrawalApply(WithdrawalRequestsDTO params) { if (params.getWithdrawalAmount().compareTo(new BigDecimal("200")) > 0) { if (params.getWithdrawalAmount().compareTo(MAX_WITHDRAWAL_AMOUNT) > 0) { throw new ServiceException("提现失败,单次提现金额不能超过200元!"); } LoginUser loginUserApplet = tokenService.getLoginUserApplet(); AppUser appUser = appUserClient.getAppUserById(loginUserApplet.getUserid()); if (appUser.getWithdrawableAmount().compareTo(params.getWithdrawalAmount()) < 0) { throw new ServiceException("提现失败,可提现金额不足!"); } Integer vipId = appUser.getVipId(); VipSetting vipSetting = vipSettingService.getVipSettingById(vipId); if (vipSetting.getVipWithdrawalRole() == 0) { throw new ServiceException("提现失败,当前会员等级不允许提现!"); } BigDecimal vipWithdrawalMinAmount = vipSetting.getVipWithdrawalMinAmount(); if (params.getWithdrawalAmount().compareTo(vipWithdrawalMinAmount) < 0) { throw new ServiceException("提现失败,提现金额不能小于" + vipWithdrawalMinAmount + "元!"); } // 提现手续费 BigDecimal vipWithdrawalFee = vipSetting.getVipWithdrawalFee() .divide(VIP_WITHDRAWAL_FEE_DENOMINATOR, 2, RoundingMode.HALF_UP); // 减去手续费 params.setWithdrawalAmount(params.getWithdrawalAmount() .subtract(params.getWithdrawalAmount().multiply(vipWithdrawalFee))); WithdrawalRequests withdrawalRequests = new WithdrawalRequests(); BeanUtils.copyBeanProp(withdrawalRequests, params); @@ -50,4 +77,5 @@ withdrawalRequests.setAuditStatus(1); save(withdrawalRequests); } } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletVO.java
@@ -33,4 +33,7 @@ @ApiModelProperty(value = "分销总金额") private BigDecimal totalDistributionAmount; @ApiModelProperty(value = "提现手续费") private BigDecimal vipWithdrawalFee; } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -10,16 +10,10 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.other.api.domain.Shop; import com.ruoyi.other.api.domain.Technician; import com.ruoyi.other.enums.ShopStatus; import com.ruoyi.other.service.ShopService; import com.ruoyi.other.service.TechnicianService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.*; import com.ruoyi.other.vo.NearbyShopVO; import com.ruoyi.other.vo.ShopDetailVO; import com.ruoyi.other.vo.VerifiableShopVo; import io.swagger.annotations.*; import org.springframework.web.bind.annotation.*;