From 3ea3c013bb241c05d0e6a2c4344d9b708ffa1e61 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 09 Mar 2023 16:01:46 +0800 Subject: [PATCH] 下单,余额支付,转账,分享奖,星级奖励,商品贡献值,补贴三倍回购 --- src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 105 ++++++++++++++++++++++++++++++++++------------------ 1 files changed, 69 insertions(+), 36 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java index cc45a65..3fce202 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java @@ -44,6 +44,7 @@ private final IMallMoneyFlowService mallMoneyFlowService; private final MallMemberWalletMapper mallMemberWalletMapper; private final SqlSessionTemplate sqlSessionTemplate; + private final IApiMallMemberWalletService memberWalletService; @Override @Transactional(rollbackFor = Exception.class) @@ -195,14 +196,25 @@ //分享补贴金额 BigDecimal sharePerkAmount = amount.multiply(sharePerkPercent); - iApiMallMemberWalletService.addBalance(sharePerkAmount, mallMemberUp.getId()); + //所有合伙人补贴至消费礼包的三倍额度需要复购一次。 + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberUp.getId()); + BigDecimal totalScore = mallMemberWallet.getTotalScore(); + if(totalScore.compareTo(sharePerkAmount) < 0){ + sharePerkAmount = totalScore; + } + if(BigDecimal.ZERO.compareTo(sharePerkAmount) < 0){ + //减少补贴额度 + memberWalletService.reduce(sharePerkAmount, memberId, "totalScore"); - mallMoneyFlowService.addMoneyFlow( - mallMemberUp.getId(), - sharePerkAmount, - MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), - mallOrderInfo.getOrderNo(), - FlowTypeEnum.BALANCE.getValue()); + iApiMallMemberWalletService.addBalance(sharePerkAmount, mallMemberUp.getId()); + + mallMoneyFlowService.addMoneyFlow( + mallMemberUp.getId(), + sharePerkAmount, + MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), + mallOrderInfo.getOrderNo(), + FlowTypeEnum.BALANCE.getValue()); + } } /** * 星级奖励 @@ -228,6 +240,7 @@ * @return */ public List<MallMember> getStarRecord(List<MallMember> mallMembersOlds,String LevelParam,BigDecimal amount,String orderNo,Long memberId,int starPerkType){ + long start = System.currentTimeMillis(); //根据用户的level获取用户 List<MallMember> mallMemberStars = memberMapper.selectMemberWithLevel(LevelParam); if(CollUtil.isNotEmpty(mallMembersOlds)){ @@ -260,6 +273,7 @@ //给当前等级的每个用户发放星级奖励 int count = 0; List<Map<String,Object>> result = new ArrayList<>(); + List<Map<String,Object>> resultReduce = new ArrayList<>(); List<MallMoneyFlow> mallMoneyFlows = new ArrayList<>(); for(MallMemberWallet mallMemberWallet : mallMemberWallets){ Map<String,Object> hashMap = new HashMap<>(); @@ -267,44 +281,63 @@ //当前用户的星级奖励 BigDecimal starPerkAmount = starPerkAmountAva .multiply(new BigDecimal(starCnt)).abs().setScale(2, BigDecimal.ROUND_DOWN); - hashMap.put("id",mallMemberWallet.getId()); - hashMap.put("starPerkAmount",starPerkAmount); - result.add(hashMap); - //生成星级奖励的流水对象 - MallMoneyFlow mallMoneyFlow = new MallMoneyFlow(); - mallMoneyFlow.setMemberId(mallMemberWallet.getMemberId()); - mallMoneyFlow.setAmount(starPerkAmount); - mallMoneyFlow.setType(starPerkType); - mallMoneyFlow.setOrderNo(orderNo); - mallMoneyFlow.setRtMemberId(memberId); - mallMoneyFlow.setStatus(2); - mallMoneyFlow.setFlowType(FlowTypeEnum.BALANCE.getValue()); - mallMoneyFlows.add(mallMoneyFlow); + BigDecimal totalScorePerk = mallMemberWallet.getTotalScore(); + if(totalScorePerk.compareTo(starPerkAmount) < 0){ + starPerkAmount = totalScorePerk; + } + if(BigDecimal.ZERO.compareTo(starPerkAmount) < 0){ + hashMap.put("id",mallMemberWallet.getId()); + hashMap.put("starPerkAmount",starPerkAmount); + result.add(hashMap); + resultReduce.add(hashMap); + //生成星级奖励的流水对象 + MallMoneyFlow mallMoneyFlow = new MallMoneyFlow(); + mallMoneyFlow.setMemberId(mallMemberWallet.getMemberId()); + mallMoneyFlow.setAmount(starPerkAmount); + mallMoneyFlow.setType(starPerkType); + mallMoneyFlow.setOrderNo(orderNo); + mallMoneyFlow.setRtMemberId(memberId); + mallMoneyFlow.setStatus(2); + mallMoneyFlow.setFlowType(FlowTypeEnum.BALANCE.getValue()); + mallMoneyFlows.add(mallMoneyFlow); + } count = count + 1; if (count % 1000 == 0 || count == mallMemberWallets.size()) { - int updateCount = mallMemberWalletMapper.updateStarByList(result); - if(updateCount>0){ - log.info("============更新============第{}条数据===========",count); + if(CollUtil.isNotEmpty(result)){ + int resultCount = mallMemberWalletMapper.updateStarByList(result); + if(resultCount>0){ + log.info("============余额新增============第{}条数据===========",resultCount); + } + //每更新完一批数据,在result内进行删除操作。 + result.clear(); + + int resultReduceCount = mallMemberWalletMapper.updateTotalScoreByList(resultReduce); + if(resultReduceCount>0){ + log.info("============额度减少============第{}条数据===========",resultReduceCount); + } + //每更新完一批数据,在result内进行删除操作。 + resultReduce.clear(); } - //每更新完一批数据,在result内进行删除操作。 - result.clear(); } } - SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false); - MallMoneyFlowMapper mallMoneyFlowMapper = sqlSession.getMapper(MallMoneyFlowMapper.class); - long start = System.currentTimeMillis(); - for(int i = 1; i <= mallMoneyFlows.size(); i++){ - mallMoneyFlowMapper.insertMoneyFlow(mallMoneyFlows.get(i-1)); - if (i % 1000 == 0 || i == mallMoneyFlows.size()) { - long end = System.currentTimeMillis(); - log.info("============插入============第{}条数据,时间:{}===========",mallMoneyFlows.size(),(end - start)/1000); - sqlSession.commit(); - sqlSession.clearCache(); + if(CollUtil.isNotEmpty(mallMoneyFlows)){ + SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false); + MallMoneyFlowMapper mallMoneyFlowMapper = sqlSession.getMapper(MallMoneyFlowMapper.class); + + for(int i = 1; i <= mallMoneyFlows.size(); i++){ + mallMoneyFlowMapper.insertMoneyFlow(mallMoneyFlows.get(i-1)); + if (i % 1000 == 0 || i == mallMoneyFlows.size()) { + log.info("============插入流水============第{}条数据===========",mallMoneyFlows.size()); + sqlSession.commit(); + sqlSession.clearCache(); + } } + sqlSession.close(); } - sqlSession.close(); } } + long end = System.currentTimeMillis(); + log.info("============订单:{},时间:{}===========",orderNo,(end - start)/1000); return mallMemberStars; } } -- Gitblit v1.9.1