src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -203,51 +203,55 @@ * 2、返利对象:下单人的直推上级 * 3、金额:返利比例乘以补贴金额 */ //下单人的直推上级 MallMember mallMemberOne = memberMapper.selectInfoByInviteId(mallMember.getReferrerId()); DataDictionaryCustom rewardPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.REWARD_PERCENT.getType(), DataDictionaryEnum.REWARD_PERCENT.getCode() ); BigDecimal rewardPercent = new BigDecimal(rewardPercentDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal directRewardAmount = subsidyAmount.multiply(rewardPercent).setScale(2, BigDecimal.ROUND_DOWN); Long marketSubsidyFlowId = mallMoneyFlowService.addMoneyFlow( mallMember.getId(), orderInfo.getOrderNo(), directRewardAmount, MallMoneyFlowTypeEnum.DIRECT_REWARD.getCode(), MallMoneyFlow.STATUS_SUCCESS, MallMoneyFlow.IS_RETURN_Y, mallMemberOne.getId(), FlowTypeEnum.BALANCE.getValue(), MallMoneyFlowTypeEnum.DIRECT_REWARD.getName() ); memberWalletService.addBalance(directRewardAmount,mallMemberOne.getId()); /** * 生成分享奖励的流水记录 * 1、待生效 * 2、返利对象:下单人的直推上级 10%,直推的直推 5% * 3、金额:补贴金额乘以分享奖励的比例 */ DataDictionaryCustom shareOneDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.LEVEL_ONE.getType(), DataDictionaryEnum.LEVEL_ONE.getCode() ); BigDecimal shareOne = new BigDecimal(shareOneDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal shareOneAmount = subsidyAmount.multiply(shareOne).setScale(2, BigDecimal.ROUND_DOWN); Long ShareOneFlowId = mallMoneyFlowService.addMoneyFlow( mallMember.getId(), orderInfo.getOrderNo(), shareOneAmount, MallMoneyFlowTypeEnum.SHARE_REWARD_ONE.getCode(), MallMoneyFlow.STATUS_SUCCESS, MallMoneyFlow.IS_RETURN_Y, mallMemberOne.getId(), FlowTypeEnum.BALANCE.getValue(), MallMoneyFlowTypeEnum.SHARE_REWARD_ONE.getName() ); memberWalletService.addBalance(shareOneAmount,mallMemberOne.getId()); //下单人的直推上级 MallMember mallMemberOne = memberMapper.selectInfoByInviteId(mallMember.getReferrerId()); //生成直推返利的流水记录 if(ObjectUtil.isNotEmpty(mallMemberOne)){ DataDictionaryCustom rewardPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.REWARD_PERCENT.getType(), DataDictionaryEnum.REWARD_PERCENT.getCode() ); BigDecimal rewardPercent = new BigDecimal(rewardPercentDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal directRewardAmount = subsidyAmount.multiply(rewardPercent).setScale(2, BigDecimal.ROUND_DOWN); Long marketSubsidyFlowId = mallMoneyFlowService.addMoneyFlow( mallMember.getId(), orderInfo.getOrderNo(), directRewardAmount, MallMoneyFlowTypeEnum.DIRECT_REWARD.getCode(), MallMoneyFlow.STATUS_SUCCESS, MallMoneyFlow.IS_RETURN_Y, mallMemberOne.getId(), FlowTypeEnum.BALANCE.getValue(), MallMoneyFlowTypeEnum.DIRECT_REWARD.getName() ); memberWalletService.addBalance(directRewardAmount,mallMemberOne.getId()); DataDictionaryCustom shareOneDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( DataDictionaryEnum.LEVEL_ONE.getType(), DataDictionaryEnum.LEVEL_ONE.getCode() ); //生成分享奖励的流水记录 BigDecimal shareOne = new BigDecimal(shareOneDic.getValue()).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN); BigDecimal shareOneAmount = subsidyAmount.multiply(shareOne).setScale(2, BigDecimal.ROUND_DOWN); Long ShareOneFlowId = mallMoneyFlowService.addMoneyFlow( mallMember.getId(), orderInfo.getOrderNo(), shareOneAmount, MallMoneyFlowTypeEnum.SHARE_REWARD_ONE.getCode(), MallMoneyFlow.STATUS_SUCCESS, MallMoneyFlow.IS_RETURN_Y, mallMemberOne.getId(), FlowTypeEnum.BALANCE.getValue(), MallMoneyFlowTypeEnum.SHARE_REWARD_ONE.getName() ); memberWalletService.addBalance(shareOneAmount,mallMemberOne.getId()); } //下单人的直推上级的直推 MallMember mallMemberTwo = memberMapper.selectInfoByInviteId(mallMemberOne.getReferrerId()); if(ObjectUtil.isNotEmpty(mallMemberTwo)){ src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java
@@ -45,4 +45,7 @@ @ApiModelProperty(value = "评价状态 1:待评价 2:已评价") private Integer commentState; @ApiModelProperty(value = "补贴金额") private Integer subsidyAmount; } src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
@@ -26,7 +26,11 @@ </select> <select id="selectSkuByGoodsId" resultType="cc.mrbird.febs.mall.entity.MallGoodsSku"> select a.*, b.name styleName from mall_goods_sku a select a.*, b.name styleName, b.name goodsName from mall_goods_sku a inner join mall_goods_style b on a.style_id=b.id where a.goods_id=#{id} </select> src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
@@ -138,7 +138,7 @@ <select id="selectOneByMemberIdAndOrderNoAndTypeAndStatusAndIsReturn" resultType="cc.mrbird.febs.mall.entity.MallMoneyFlow"> select a.* from mall_money_flow a where a.memberId = #{memberId} where a.member_id = #{memberId} and a.order_no = #{orderNo} and a.type = #{type} and a.status = #{status} src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -1,18 +1,31 @@ package cc.mrbird.febs; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.MallMoneyFlowTypeEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; 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.MallUtils; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallMoneyFlow; import cc.mrbird.febs.mall.entity.MallOrderInfo; import cc.mrbird.febs.mall.entity.MallOrderItem; import cc.mrbird.febs.mall.mapper.MallMemberMapper; import cc.mrbird.febs.mall.mapper.MallMoneyFlowMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; import cc.mrbird.febs.mall.mapper.MallOrderItemMapper; import cc.mrbird.febs.mall.quartz.OrderSettlementJob; import cc.mrbird.febs.mall.service.IAgentService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallAchieveService; import cc.mrbird.febs.mall.service.IMemberProfitService; import cc.mrbird.febs.pay.model.*; import cc.mrbird.febs.pay.service.UnipayService; import cc.mrbird.febs.rabbit.consumer.AgentConsumer; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -31,61 +44,101 @@ @SpringBootTest public class ProfitTest { // @Autowired // private AgentConsumer agentConsumer; // // @Autowired // private IAgentService agentService; // // @Autowired // private IMemberProfitService memberProfitService; // @Autowired private AgentConsumer agentConsumer; @Autowired private IAgentService agentService; @Autowired private IMemberProfitService memberProfitService; @Test public void dynamicProfit() { memberProfitService.dynamicProfit(21L); } @Test public void agentProfit() { memberProfitService.agentProfit(null); } // @Test // public void dynamicProfit() { // memberProfitService.dynamicProfit(21L); // public void staticProfit() { // memberProfitService.staticProfit(new Date()); // } // @Test // public void agentProfit() { // memberProfitService.agentProfit(null); // } // // //// @Test //// public void staticProfit() { //// memberProfitService.staticProfit(new Date()); //// } // // @Test // public void thankfulProfit() { // memberProfitService.thankfulProfit(new Date()); // } // // @Test // public void rankProfit() { // memberProfitService.rankProfit(); // } // // @Autowired // private MallOrderInfoMapper mallOrderInfoMapper; // // @Test // public void directorProfitTest() { // memberProfitService.storeAndDirectorProfit(new Date()); // } // // @Autowired // private MallOrderItemMapper mallOrderItemMapper; // // @Autowired // private IMallAchieveService mallAchieveService; // // @Test // public void achieveTest() { // List<MallOrderItem> items = mallOrderItemMapper.selectList(null); // for (MallOrderItem item : items) { // mallAchieveService.add(item.getId()); // } // } @Test public void thankfulProfit() { memberProfitService.thankfulProfit(new Date()); } @Test public void rankProfit() { memberProfitService.rankProfit(); } @Autowired private MallOrderInfoMapper mallOrderInfoMapper; @Autowired private MallMemberMapper mallMemberMapper; @Autowired private MallMoneyFlowMapper mallMoneyFlowMapper; @Autowired private IApiMallMemberWalletService memberWalletService; @Autowired private AgentProducer agentProducer; @Test public void directorProfitTest() { MallMember member = mallMemberMapper.selectById(1L); MallOrderInfo orderInfo = mallOrderInfoMapper.selectOrderByMemberIdAndId(member.getId(), 577L); if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) { throw new FebsException("订单不存在"); } if (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) { throw new FebsException("该状态不能确认收货"); } orderInfo.setStatus(OrderStatusEnum.FINISH.getValue()); orderInfo.setReceivingTime(new Date()); mallOrderInfoMapper.updateById(orderInfo); /** * 通过支付流水记录,返回下单金额 */ MallMoneyFlow payFlow = mallMoneyFlowMapper.selectOneByMemberIdAndOrderNoAndTypeAndStatusAndIsReturn( member.getId(), orderInfo.getOrderNo(), MallMoneyFlowTypeEnum.PAY.getCode(), MallMoneyFlow.STATUS_SUCCESS, MallMoneyFlow.IS_RETURN_N); if(ObjectUtil.isNotEmpty(payFlow)){ memberWalletService.addBalance(payFlow.getAmount().negate(),payFlow.getRtMemberId()); payFlow.setIsReturn(MallMoneyFlow.IS_RETURN_Y); mallMoneyFlowMapper.updateById(payFlow); } //产生补贴流水记录 agentProducer.sendDirectRewardMsg(orderInfo.getId()); } @Autowired private MallOrderItemMapper mallOrderItemMapper; @Autowired private IMallAchieveService mallAchieveService; @Test public void achieveTest() { List<MallOrderItem> items = mallOrderItemMapper.selectList(null); for (MallOrderItem item : items) { mallAchieveService.add(item.getId()); } } // // @Test // public void paramTest() {