src/main/java/cc/mrbird/febs/mall/mapper/MallProductBuyMapper.java
@@ -31,4 +31,6 @@ Integer selectListByMemberIdAndState(@Param("memberId")Long id); IPage<ApiOrderSellVo> selectSellListInPage(IPage<ApiOrderSellVo> page, @Param("record")ApiOrderSellDto apiOrderBuyDto); List<MallProductBuy> selectTotalPerk(); } src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -125,6 +125,14 @@ agentService.BuyToSell(); } /** * 用户预约完成之后,根据产品周期,将用户买单变成买单 */ @Scheduled(cron = "0 0 3 * * ?") public void memberLevelDown() { agentService.memberLevelDown(); } /** * 用户等级升级 src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -55,4 +55,6 @@ void equalsMemberPerk(); void memberLevelUp(); void memberLevelDown(); } src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -891,8 +891,24 @@ /** * 用户的账户增加对应的收益 */ BigDecimal totalPerk = mallProductBuy.getTotalPerk(); if(BigDecimal.ZERO.compareTo(totalPerk) >= 0){ mallProductBuy.setTotalPerk(BigDecimal.ZERO); mallProductBuyMapper.updateById(mallProductBuy); continue; } BigDecimal nftTotal = mallProductBuy.getNftTotal(); BigDecimal profit = nftTotal.multiply(profitPercent.multiply(new BigDecimal(0.01))); if(totalPerk.compareTo(profit) <= 0){ profit = totalPerk; mallProductBuy.setTotalPerk(BigDecimal.ZERO); mallProductBuyMapper.updateById(mallProductBuy); }else{ mallProductBuy.setTotalPerk(totalPerk.subtract(profit).setScale(2,BigDecimal.ROUND_DOWN)); mallProductBuyMapper.updateById(mallProductBuy); } // insertSell(mallProductBuy.getMemberId(),profit,profit,BigDecimal.ZERO,BigDecimal.ZERO); String orderNoSY = MallUtils.getOrderNum("SYNFT"); mallMoneyFlowService.addMoneyFlow( @@ -908,6 +924,7 @@ MallMemberAmount mallMemberAmountMine = mallMemberAmountMapper.selectByMemberId(mallProductBuy.getMemberId()); mallMemberAmountMine.setTrendsNft(mallMemberAmountMine.getTrendsNft().add(profit)); mallMemberAmountMapper.updateTrendsNftById(mallMemberAmountMine); BigDecimal remainderDirect = bigDecimal.divide(new BigDecimal(String.valueOf(cycle)),0,BigDecimal.ROUND_DOWN);//取余 if(remainderDirect.compareTo(BigDecimal.ONE) == 0){ @@ -1446,6 +1463,23 @@ } } @Override public void memberLevelDown() { List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectTotalPerk(); if(CollUtil.isEmpty(mallProductBuys)){ return; } for(MallProductBuy mallProductBuy : mallProductBuys){ BigDecimal totalPerk = mallProductBuy.getTotalPerk(); if(BigDecimal.ZERO.compareTo(totalPerk) >= 0 ){ Long memberId = mallProductBuy.getMemberId(); MallMember mallMember = memberMapper.selectById(memberId); mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.getCode()); memberMapper.updateById(mallMember); } } } public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva, BigDecimal nftFee,BigDecimal fcmFeeCnt){ String orderNo = MallUtils.getOrderNum("NFT"); src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -66,6 +66,7 @@ private final MallProductSellRecordMapper mallProductSellRecordMapper; private final MallMemberAmountMapper mallMemberAmountMapper; private final IMallMoneyFlowService iMallMoneyFlowService; private final MallProductNftMapper mallProductNftMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -1262,9 +1263,17 @@ BigDecimal nftCntTotalBuy = mallProductBuyRecords.stream().map(MallProductBuyRecord::getPickNftCnt).reduce(BigDecimal.ZERO, BigDecimal::add); MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(buyId); if(nftCntTotalBuy.compareTo(mallProductBuy.getNftTotal()) >= 0){ Long productNftId = mallProductBuy.getProductNftId(); MallProductNft mallProductNft = mallProductNftMapper.selectById(productNftId); BigDecimal perkTime = mallProductNft.getPerkTime(); BigDecimal totalPerk = perkTime.multiply(mallProductBuy.getNftTotal()).setScale(2, BigDecimal.ROUND_DOWN); mallProductBuy.setTotalPerk(totalPerk); mallProductBuy.setState(ProductEnum.PRODUCT_BUY_SUCCESS.getValue()); mallProductBuy.setPayTime(DateUtil.date()); mallProductBuyMapper.updateById(mallProductBuy); } } } src/main/java/cc/mrbird/febs/mall/vo/AdminMallProductNftVo.java
@@ -20,4 +20,5 @@ private int state;//产品状态 1:开启 0:关闭 private int memberCnt;//预约人数 private int memberReal;//已预约人数 private BigDecimal perkTime;//收益倍数 } src/main/resources/mapper/modules/MallProductBuyMapper.xml
@@ -62,4 +62,10 @@ order by a.CREATED_TIME desc </select> <select id="selectTotalPerk" resultType="cc.mrbird.febs.mall.entity.MallProductBuy"> select SUM(total_perk) from mall_product_buy where state = 3 GROUP BY member_id; </select> </mapper> src/main/resources/templates/febs/views/modules/news/productNFTList.html
@@ -133,6 +133,7 @@ {field: 'priceToken', title: '宝石', minWidth: 120,align:'center'}, {field: 'profit', title: '收益(%)', minWidth: 120,align:'center'}, {field: 'cycle', title: '周期(天)', minWidth: 120,align:'center'}, {field: 'perkTime', title: '收益倍数', minWidth: 120,align:'center'}, {field: 'memberCnt', title: '预约总数', minWidth: 120,align:'center'}, {field: 'memberReal', title: '已预约数', minWidth: 120,align:'center'}, {field: 'nftImg', title: '缩略图', src/main/resources/templates/febs/views/modules/news/productNFTUpdate.html
@@ -69,6 +69,15 @@ </div> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">收益倍数:</label> <div class="layui-input-block"> <input type="text" name="perkTime" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> <div class="layui-form-mid layui-word-aux"> 5 即百分之五</div> </div> </div> </div> <div class="layui-row layui-col-space10 layui-form-item"> <div class="layui-col-lg6"> <label class="layui-form-label febs-form-item-require">预约总数:</label> <div class="layui-input-block"> <input type="text" name="memberCnt" lay-verify="required" placeholder="" autocomplete="off" class="layui-input"> @@ -178,6 +187,7 @@ "state": mallProductNft.state, "memberCnt": mallProductNft.memberCnt, "memberReal": mallProductNft.memberReal, "perkTime": mallProductNft.perkTime, }); } });