src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeNewEnum.java
@@ -5,6 +5,7 @@ @Getter public enum FlowTypeNewEnum { GSD(4,"GSD"), NFT(3,"NFT"), TOKEN(2,"门票"), FCM_COIN(1,"GFA代币")// src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
@@ -11,6 +11,8 @@ @Getter public enum MoneyFlowTypeNewEnum { GFA_GSD(24,"GFA兑换GSD"), NFT_GSD(23,"NFT兑换GSD"), TEAM_PERK_EQUALS_DONE(22,"平级奖励"), TEAM_PERK_DIRECT_DONE(21,"团队奖励"), src/main/java/cc/mrbird/febs/mall/controller/ApiMallProductController.java
@@ -120,6 +120,13 @@ return iApiMallProductService.outFcm(outFcmDto); } @ApiOperation(value = "FCM-NFT兑换GFD,GFA兑换GFD", notes = "FCM-NFT兑换GFD,GFA兑换GFD") @PostMapping(value = "/transGfd") public FebsResponse transGfd(@RequestBody @Valid ApiTransGfdDto transGfdDto) { return iApiMallProductService.transGfd(transGfdDto); } @ApiOperation(value = "FCM-NFT提现", notes = "FCM-NFT提现") @PostMapping(value = "/outNFT") public FebsResponse outNFT(@RequestBody @Valid ApiOutNFTDto outNFTDto) { src/main/java/cc/mrbird/febs/mall/dto/ApiTransGfdDto.java
New file @@ -0,0 +1,31 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.Valid; import javax.validation.constraints.Min; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; @Data @ApiModel(value = "ApiTransGfdDto", description = "请求类") public class ApiTransGfdDto { @Valid @NotNull(message = "数量不能为空") @Min(0) @ApiModelProperty(value = "兑换数量", example = "1") private BigDecimal cnt; @NotNull(message = "类型不能为空") @ApiModelProperty(value = "类型 1:NFT兑换GFD 2:GFA兑换GFD", example = "1") private Integer type; @NotBlank(message = "交易密码不能为空") @ApiModelProperty(value = "交易密码", example = "1") private String tradePassword; } src/main/java/cc/mrbird/febs/mall/entity/MallMemberAmount.java
@@ -36,4 +36,5 @@ private BigDecimal fcmCntFrozen;//FCM代币冻结 private BigDecimal tokenAva;//令牌可用 private BigDecimal tokenFrozen;//令牌冻结 private BigDecimal gsd;//gsd积分-用来商城购物 } src/main/java/cc/mrbird/febs/mall/mapper/MallMemberAmountMapper.java
@@ -17,8 +17,13 @@ void updateTokenAvaAndTokenFrozenById(@Param("record")MallMemberAmount mallMemberAmount); void updateTrendsNftById(@Param("record")MallMemberAmount mallMemberAmount); void updateGsdById(@Param("record")MallMemberAmount mallMemberAmount); void updateFrozenNftById(@Param("record")MallMemberAmount mallMemberAmount); void updateTrendsNftAndFrozenNftById(@Param("record")MallMemberAmount mallMemberAmount); void updateTrendsNftAndGsdById(@Param("record")MallMemberAmount mallMemberAmount); void updateFcmCntAvaAndGsdById(@Param("record")MallMemberAmount mallMemberAmount); } src/main/java/cc/mrbird/febs/mall/service/IApiMallProductService.java
@@ -39,4 +39,6 @@ FebsResponse orderSellRecord(ApiOrderSellInfoDto apiOrderSellInfoDto); FebsResponse orderBuyRecord(ApiOrderBuyInfoDto apiOrderBuyInfoDto); FebsResponse transGfd(ApiTransGfdDto transGfdDto); } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -87,6 +87,7 @@ private final MallProductSellRecordMapper mallProductSellRecordMapper; private final ICommonService commonService; private final MallMemberAmountMapper mallMemberAmountMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -351,22 +352,25 @@ orderInfo.setPayTime(new Date()); orderInfo.setPayResult("1"); this.baseMapper.updateById(orderInfo); MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(member.getId()); mallMemberAmount.setGsd(mallMemberAmount.getGsd().subtract(orderInfo.getAmount())); mallMemberAmountMapper.updateGsdById(mallMemberAmount); commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.BALANCE.getValue()); // commonService.changeWallet(orderInfo.getId(), FlowTypeEnum.BALANCE.getValue()); /** * 插入一条待处理记录 * mq处理之后,更新状态 */ MallMqRecord mallMqRecord = new MallMqRecord(); mallMqRecord.setOrderId(orderInfo.getId()); mallMqRecord.setState(2); mallMqRecord.setRetryTimes(2); mallMqRecord.setCreateTime(orderInfo.getPayTime()); mallMqRecordMapper.insert(mallMqRecord); //发送补贴消息 agentProducer.sendPerkMoneyMsg(orderInfo.getId()); //发送代理自动升级消息 agentProducer.sendAutoLevelUpMsg(member.getId()); // MallMqRecord mallMqRecord = new MallMqRecord(); // mallMqRecord.setOrderId(orderInfo.getId()); // mallMqRecord.setState(2); // mallMqRecord.setRetryTimes(2); // mallMqRecord.setCreateTime(orderInfo.getPayTime()); // mallMqRecordMapper.insert(mallMqRecord); // //发送补贴消息 // agentProducer.sendPerkMoneyMsg(orderInfo.getId()); // //发送代理自动升级消息 // agentProducer.sendAutoLevelUpMsg(member.getId()); break; case "4": if (orderInfo.getOrderType() != 2) { src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallProductServiceImpl.java
@@ -699,4 +699,71 @@ ApiOrderBuyRecordInfoVo apiOrderBuyRecordInfoVo = mallProductBuyRecordMapper.selectByBuyRecordId(productBuyRecordId); return new FebsResponse().success().data(apiOrderBuyRecordInfoVo); } @Override public FebsResponse transGfd(ApiTransGfdDto transGfdDto) { Long memberId = LoginUserUtil.getLoginUser().getId(); BigDecimal cnt = transGfdDto.getCnt();//兑换数量 MallMember mallMember = memberMapper.selectById(memberId); String tradePassword = SecureUtil.md5(transGfdDto.getTradePassword()); Boolean aBoolean = operationPermissionMemberFrozen(memberId); if(aBoolean){ throw new FebsException("用户已冻结"); } if(!tradePassword.equals(mallMember.getTradePassword())){ throw new FebsException("请输入正确的交易密码"); } MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId); Integer type = transGfdDto.getType(); String orderNo = MallUtils.getOrderNum("GSD"); if(1 == type){//NFT兑换GFD BigDecimal trendsNft = mallMemberAmount.getTrendsNft(); if(BigDecimal.ZERO.compareTo(trendsNft) >= 0){ throw new FebsException("NFT不足"); } if(cnt.compareTo(trendsNft) > 0){ throw new FebsException("NFT不足"); } mallMemberAmount.setTrendsNft(trendsNft.subtract(cnt)); mallMemberAmount.setGsd(mallMemberAmount.getGsd().add(cnt)); mallMemberAmountMapper.updateTrendsNftAndGsdById(mallMemberAmount); iMallMoneyFlowService.addMoneyFlow( memberId, cnt, MoneyFlowTypeNewEnum.NFT_GSD.getValue(), orderNo, mallMember.getId(), FlowTypeNewEnum.GSD.getValue(), MoneyFlowTypeNewEnum.NFT_GSD.getDescrition()); } if(2 == type){//GFA兑换GFD BigDecimal fcmCntAva = mallMemberAmount.getFcmCntAva(); if(BigDecimal.ZERO.compareTo(fcmCntAva) >= 0){ throw new FebsException("代币不足"); } if(cnt.compareTo(fcmCntAva) > 0){ throw new FebsException("代币不足"); } DataDictionaryCustom fcmPriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.FCM_PRICE.getType(), DataDictionaryEnum.FCM_PRICE.getCode()); BigDecimal fcmPrice = ObjectUtil.isEmpty(fcmPriceDic) ? new BigDecimal(2) : new BigDecimal(fcmPriceDic.getValue()); BigDecimal gsdCnt = fcmPrice.multiply(cnt); mallMemberAmount.setFcmCntAva(fcmCntAva.subtract(cnt)); mallMemberAmount.setGsd(mallMemberAmount.getGsd().add(gsdCnt)); mallMemberAmountMapper.updateFcmCntAvaAndGsdById(mallMemberAmount); iMallMoneyFlowService.addMoneyFlow( memberId, cnt, MoneyFlowTypeNewEnum.GFA_GSD.getValue(), orderNo, mallMember.getId(), FlowTypeNewEnum.GSD.getValue(), MoneyFlowTypeNewEnum.GFA_GSD.getDescrition()); } return new FebsResponse().success(); } } src/main/resources/mapper/modules/MallMemberAmountMapper.xml
@@ -35,6 +35,13 @@ where id = #{record.id} and revision=#{record.revision} </update> <update id="updateGsdById"> update mall_member_amount set revision = revision + 1, gsd = #{record.gsd} where id = #{record.id} and revision=#{record.revision} </update> <update id="updateFrozenNftById"> update mall_member_amount set revision = revision + 1, @@ -50,4 +57,20 @@ where id = #{record.id} and revision=#{record.revision} </update> <update id="updateTrendsNftAndGsdById"> update mall_member_amount set revision = revision + 1, gsd = #{record.gsd}, trends_nft = #{record.trendsNft} where id = #{record.id} and revision=#{record.revision} </update> <update id="updateFcmCntAvaAndGsdById"> update mall_member_amount set revision = revision + 1, gsd = #{record.gsd}, fcm_cnt_ava = #{record.fcmCntAva} where id = #{record.id} and revision=#{record.revision} </update> </mapper>