src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/common/utils/MallUtils.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/dto/TransferDto.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/dto/WithdrawalDto.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/resources/mapper/modules/MallMemberMapper.xml | ●●●●● patch | view | raw | blame | history |
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -28,7 +28,11 @@ /** * 转账 */ TRANSFER(5); TRANSFER(5), /** * 提现 */ WITHDRAWAL(6); private final int value; src/main/java/cc/mrbird/febs/common/utils/MallUtils.java
@@ -1,5 +1,7 @@ package cc.mrbird.febs.common.utils; import cn.hutool.core.util.StrUtil; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; @@ -22,9 +24,16 @@ return sb.toString(); } public static String getOrderNum() { public static String getOrderNum(String prefix) { SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String dd=df.format(new Date()); if (StrUtil.isNotBlank(prefix)) { return prefix+dd+getRandomNum(5); } return dd+getRandomNum(5); } public static String getOrderNum() { return getOrderNum(null); } } src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
@@ -1,10 +1,7 @@ package cc.mrbird.febs.mall.controller; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.ForgetPwdDto; import cc.mrbird.febs.mall.dto.ModifyMemberInfoDto; import cc.mrbird.febs.mall.dto.MoneyFlowDto; import cc.mrbird.febs.mall.dto.TeamListDto; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.vo.MallMemberVo; import cc.mrbird.febs.mall.vo.MoneyFlowVo; @@ -15,7 +12,10 @@ import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; /** * @author wzy @@ -80,4 +80,18 @@ public FebsResponse moneyFlow(@RequestBody MoneyFlowDto moneyFlowDto) { return memberService.moneyFlows(moneyFlowDto); } @ApiOperation(value = "转账") @PostMapping(value = "/transfer") public FebsResponse transfer(@RequestBody @Validated TransferDto transferDto) { memberService.transfer(transferDto); return new FebsResponse().success().message("转账成功"); } @ApiOperation(value = "提现") @PostMapping(value = "/withdrawal") public FebsResponse withdrawal(@RequestBody @Validated WithdrawalDto withdrawalDto) { memberService.withdrawal(withdrawalDto); return new FebsResponse().success().message("提交成功"); } } src/main/java/cc/mrbird/febs/mall/dto/TransferDto.java
New file @@ -0,0 +1,32 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; /** * @author wzy * @date 2021-09-24 **/ @Data @ApiModel(value = "TransferDto", description = "转账接收参数类") public class TransferDto { @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "联系电话或邀请码", example = "123") private String account; @NotNull(message = "参数不能为空") @Min(0) @ApiModelProperty(value = "金额", example = "1") private BigDecimal amount; @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "交易密码", example = "123456") private String tradePwd; } src/main/java/cc/mrbird/febs/mall/dto/WithdrawalDto.java
New file @@ -0,0 +1,28 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; /** * @author wzy * @date 2021-09-24 **/ @Data @ApiModel(value = "WithdrawalDto", description = "提现接收参数类") public class WithdrawalDto { @Min(0) @NotNull(message = "参数不能为空") @ApiModelProperty(value = "金额") private BigDecimal amount; @NotBlank(message = "参数不能为空") @ApiModelProperty(value = "交易密码") private String tradePwd; } src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
@@ -29,4 +29,8 @@ FebsResponse moneyFlows(MoneyFlowDto moneyFlowDto); void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status); void transfer(TransferDto transferDto); void withdrawal(WithdrawalDto withdrawalDto); } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -1,11 +1,9 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.common.utils.ShareCodeUtil; import cc.mrbird.febs.common.utils.*; import cc.mrbird.febs.mall.conversion.MallMemberConversion; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.MallMember; @@ -14,6 +12,7 @@ import cc.mrbird.febs.mall.entity.MallShoppingCart; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.ICommonService; import cc.mrbird.febs.mall.vo.MallMemberVo; import cc.mrbird.febs.mall.vo.MoneyFlowVo; @@ -55,6 +54,7 @@ private final MallOrderInfoMapper mallOrderInfoMapper; private final MallShoppingCartMapper mallShoppingCartMapper; private final MallMoneyFlowMapper mallMoneyFlowMapper; private final IApiMallMemberWalletService walletService; @Value("${spring.profiles.active}") private String active; @@ -320,4 +320,43 @@ flow.setStatus(status); mallMoneyFlowMapper.insert(flow); } @Override @Transactional(rollbackFor = Exception.class) public void transfer(TransferDto transferDto) { MallMember mallMember = this.baseMapper.selectInfoByAccount(transferDto.getAccount()); if (mallMember == null) { throw new FebsException("用户不存在"); } Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember loginMember = this.baseMapper.selectById(memberId); if (!loginMember.getTradePassword().equals(SecureUtil.md5(transferDto.getTradePwd()))) { throw new FebsException("支付密码错误"); } walletService.reduceBalance(transferDto.getAmount(), memberId); String orderNo = MallUtils.getOrderNum("T"); this.addMoneyFlow(memberId, transferDto.getAmount().negate(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, mallMember.getId(), null); walletService.addBalance(transferDto.getAmount(), mallMember.getId()); this.addMoneyFlow(mallMember.getId(), transferDto.getAmount(), MoneyFlowTypeEnum.TRANSFER.getValue(), orderNo, null, null, memberId, null); } @Override public void withdrawal(WithdrawalDto withdrawalDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); MallMember mallMember = this.baseMapper.selectById(memberId); if (!mallMember.getTradePassword().equals(SecureUtil.md5(withdrawalDto.getTradePwd()))) { throw new FebsException("支付密码错误"); } if (withdrawalDto.getAmount().compareTo(BigDecimal.valueOf(100)) < 0) { throw new FebsException("最小提现金额为100"); } walletService.reduceBalance(withdrawalDto.getAmount(), memberId); String orderNo = MallUtils.getOrderNum("W"); this.addMoneyFlow(memberId, withdrawalDto.getAmount().negate(), MoneyFlowTypeEnum.WITHDRAWAL.getValue(), orderNo, null, null, null, 1); } } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberWalletServiceImpl.java
@@ -23,7 +23,23 @@ @Override public void addBalance(BigDecimal amount, Long memberId) { int i = 0; boolean flag = true; while (flag) { i++; MallMemberWallet wallet = this.baseMapper.selectWalletByMemberId(memberId); wallet.setBalance(wallet.getBalance().add(amount)); int result = this.baseMapper.updateBalanceWithVersion(wallet); if (result > 0) { flag = false; } else { if (i > 2) { throw new FebsException("余额增加失败"); } } } } @Override src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -45,7 +45,7 @@ </select> <select id="selectInfoByAccount" resultType="cc.mrbird.febs.mall.entity.MallMember"> select * from mall_member where phone=#{account} or email=#{account} select * from mall_member where phone=#{account} or email=#{account} or invite_id=#{account} </select> <select id="selectInfoByInviteId" resultType="cc.mrbird.febs.mall.entity.MallMember">