From 7ef244df1339c9f4ab0e94d8fe6cdd5c5879aec1 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 09 Mar 2023 11:52:34 +0800 Subject: [PATCH] 星级补贴、分享补贴的mq消费,使用批量更新和插入流水 --- src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java | 6 src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java | 12 + src/main/java/cc/mrbird/febs/mall/entity/AgentInfo.java | 4 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java | 2 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java | 6 src/test/java/cc/mrbird/febs/ProfitTest.java | 2 src/main/resources/mapper/modules/MallMemberMapper.xml | 5 src/main/resources/application-prod.yml | 2 src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java | 5 src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java | 62 ++++++++ src/main/java/cc/mrbird/febs/mall/service/IAgentService.java | 2 src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java | 32 ++++ src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java | 21 +++ src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 172 ++++++++++++++++++++++- src/main/resources/mapper/modules/MallMemberWalletMapper.xml | 20 ++ src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java | 5 src/main/resources/application-dev.yml | 2 src/main/resources/mapper/modules/MallMoneyFlowMapper.xml | 30 ++++ src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java | 2 19 files changed, 372 insertions(+), 20 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java index 50797b6..8acc19d 100644 --- a/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java +++ b/src/main/java/cc/mrbird/febs/common/configure/RabbitConfigure.java @@ -122,4 +122,25 @@ return BindingBuilder.bind(orderReturnMoneyQueue()).to(orderReturnMoneyExchange()).with(RabbitQueueEnum.ORDER_RETURN_MONEY.getRoute()); } + /** + * 补贴金额 + * @return + */ + //补贴金额 start + @Bean + public DirectExchange perkMoneyExchange() { + return new DirectExchange(RabbitQueueEnum.PERK_MONEY.getExchange()); + } + + @Bean + public Queue perkMoneyQueue() { + return new Queue(QueueConstants.PERK_MONEY); + } + + @Bean + public Binding perkMoneyBind() { + return BindingBuilder.bind(perkMoneyQueue()).to(perkMoneyExchange()).with(RabbitQueueEnum.PERK_MONEY.getRoute()); + } + //补贴金额 end + } diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java new file mode 100644 index 0000000..d6758c1 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java @@ -0,0 +1,62 @@ +package cc.mrbird.febs.common.enumerates; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +public enum MemberLevelEnum { + SEVEN_LEVEL("SEVEN_LEVEL",6), + SIX_LEVEL("SIX_LEVEL",5), + FIFTH_LEVEL("FIFTH_LEVEL",4), + FOUR_LEVEL("FOUR_LEVEL",3), + THIRD_LEVEL("THIRD_LEVEL",2), + SECOND_LEVEL("SECOND_LEVEL",1); + + + private String type; + + private Integer code; + + MemberLevelEnum(String type, Integer code) { + this.type = type; + this.code = code; + } + + public List<String> getLevelType(){ + List<String> strs = new ArrayList<>(); + for (MemberLevelEnum value : MemberLevelEnum.values()) { + strs.add(value.type); + } + return strs; + } + + public int getLevelCode(String Level){ + int codeOne = 0; + for (MemberLevelEnum value : MemberLevelEnum.values()) { + if(value.type.equals(Level)){ + codeOne = value.code; + } + } + return codeOne; + } + + //比较两个级别的大小,levelOne大于levelTwo返回1,否则返回0 + public int compareLevel(String levelOne ,String levelTwo) { + int codeOne = 0; + int codeTwo = 0; + for (MemberLevelEnum value : MemberLevelEnum.values()) { + if(value.type.equals(levelOne)){ + codeOne = value.code; + } + if(value.type.equals(levelTwo)){ + codeTwo = value.code; + } + } + if(codeOne > codeTwo){ + return 1; + } + return 0; + } +} diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java index d560d5d..a3aa3d7 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java @@ -93,7 +93,37 @@ /** * 积分池收益 */ - SCORE_POOL(18); + SCORE_POOL(18), + + /** + * 星级奖励 + */ + STAR_PERK_TWO(19), + + /** + * 星级奖励 + */ + STAR_PERK_THREE(20), + + /** + * 星级奖励 + */ + STAR_PERK_FOUR(21), + + /** + * 星级奖励 + */ + STAR_PERK_FIVE(22), + + /** + * 星级奖励 + */ + STAR_PERK_SIX(23), + + /** + * 星级奖励 + */ + STAR_PERK_SEVEN(24); private final int value; diff --git a/src/main/java/cc/mrbird/febs/mall/entity/AgentInfo.java b/src/main/java/cc/mrbird/febs/mall/entity/AgentInfo.java index 6918575..c15ebf6 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/AgentInfo.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/AgentInfo.java @@ -14,12 +14,12 @@ public class AgentInfo { /** - * 团队业绩 + * 团队贡献值 */ private BigDecimal teamIncome; /** - * 代理收益比例 + * 补贴比例 */ private BigDecimal profitProp; diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java index 4efe753..cd46097 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWallet.java @@ -43,4 +43,9 @@ * 佣金 */ private BigDecimal commission; + + /** + * 贡献点 + */ + private Integer star; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java index 5c4787a..9230766 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java @@ -85,4 +85,6 @@ List<MallMember> selectDirectorsOrStoreMaster(@Param("type") Integer type); List<MallMember> selectMemberWithLevel(String level); + + List<Long> selectMemberIdWithLevel(String levelParam); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java index cea3a64..2195065 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberWalletMapper.java @@ -5,6 +5,8 @@ import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; +import java.util.List; +import java.util.Map; public interface MallMemberWalletMapper extends BaseMapper<MallMemberWallet> { @@ -25,4 +27,8 @@ BigDecimal selectSumPrizeScore(); BigDecimal selectSumCommission(); + + List<MallMemberWallet> selectSumStarByIds(@Param("list")List<Long> ids); + + int updateStarByList(@Param("list")List<Map<String, Object>> result); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java index eaa05c6..32c1f62 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java @@ -37,4 +37,6 @@ BigDecimal selectCommissionIncome(@Param("type") Integer type, @Param("date") Date date, @Param("memberId") Long memebrid); BigDecimal selectThankfulCommission(@Param("date") Date date, @Param("memberId") Long memberId); + + void insertMoneyFlow(MallMoneyFlow mallMoneyFlow); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java index bccd530..8d3c118 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IAgentService.java @@ -7,4 +7,6 @@ void returnMoneyToAgent(Long orderId); void rankReturnMoney(Long orderId); + + void perkMoneyConsumer(long parseLong); } 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 eb14dd2..cc45a65 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 @@ -1,23 +1,21 @@ package cc.mrbird.febs.mall.service.impl; -import cc.mrbird.febs.common.enumerates.AgentLevelEnum; -import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; -import cc.mrbird.febs.common.utils.AppContants; -import cc.mrbird.febs.mall.entity.AgentInfo; -import cc.mrbird.febs.mall.entity.DataDictionaryCustom; -import cc.mrbird.febs.mall.entity.MallMember; -import cc.mrbird.febs.mall.entity.MallOrderInfo; +import cc.mrbird.febs.common.enumerates.*; +import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; -import cc.mrbird.febs.mall.service.IAgentService; -import cc.mrbird.febs.mall.service.IApiMallMemberService; -import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; -import cc.mrbird.febs.mall.service.IMallAchieveService; +import cc.mrbird.febs.mall.service.*; +import cc.mrbird.febs.system.mapper.UserMapper; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; -import jdk.nashorn.internal.ir.IfNode; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -27,6 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author wzy @@ -39,6 +38,12 @@ private final DataDictionaryCustomMapper dataDictionaryCustomMapper; private final MallMemberMapper memberMapper; + private final MallOrderInfoMapper mallOrderInfoMapper; + + private final IApiMallMemberWalletService iApiMallMemberWalletService; + private final IMallMoneyFlowService mallMoneyFlowService; + private final MallMemberWalletMapper mallMemberWalletMapper; + private final SqlSessionTemplate sqlSessionTemplate; @Override @Transactional(rollbackFor = Exception.class) @@ -136,7 +141,6 @@ /** * 团队业绩是否达标 * - * @param mallMember * @param agentInfo * @return */ @@ -161,4 +165,146 @@ public void rankReturnMoney(Long orderId) { } + + @Override + @Transactional(rollbackFor = Exception.class) + public void perkMoneyConsumer(long orderId) { + MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId); + if(ObjectUtil.isEmpty(mallOrderInfo)){ + return; + } + if(2 != mallOrderInfo.getStatus()){ + return; + } + /** + * 分享补贴 直推消费额10% + */ + BigDecimal amount = mallOrderInfo.getAmount(); + + Long memberId = mallOrderInfo.getMemberId(); + MallMember mallMember = memberMapper.selectById(memberId); + //补贴对象 直属上级 + MallMember mallMemberUp = memberMapper.selectInfoByInviteId(mallMember.getReferrerId()); + if(ObjectUtil.isNotEmpty(mallMemberUp)){ + //分享补贴百分比 + DataDictionaryCustom sharePerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.SHARE_PERK.getType(), + DataDictionaryEnum.SHARE_PERK.getCode()); + String sharePerk = ObjectUtil.isEmpty(sharePerkDic.getValue()) ? "0" : sharePerkDic.getValue(); + BigDecimal sharePerkPercent = new BigDecimal(sharePerk).abs().divide(new BigDecimal(100)); + //分享补贴金额 + BigDecimal sharePerkAmount = amount.multiply(sharePerkPercent); + + iApiMallMemberWalletService.addBalance(sharePerkAmount, mallMemberUp.getId()); + + mallMoneyFlowService.addMoneyFlow( + mallMemberUp.getId(), + sharePerkAmount, + MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), + mallOrderInfo.getOrderNo(), + FlowTypeEnum.BALANCE.getValue()); + } + /** + * 星级奖励 + * 从最顶级级别的合伙人开始补贴 + * 补贴完,把已经补贴的合伙人加入下一个级别 + */ + List<MallMember> sevenLevelRecord = getStarRecord(null, MemberLevelEnum.SEVEN_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SEVEN.getValue()); + List<MallMember> sixLevelRecord = getStarRecord(sevenLevelRecord, MemberLevelEnum.SIX_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SIX.getValue()); + List<MallMember> fifthLevelRecord = getStarRecord(sixLevelRecord, MemberLevelEnum.FIFTH_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FIVE.getValue()); + List<MallMember> fourLevelRecord = getStarRecord(fifthLevelRecord, MemberLevelEnum.FOUR_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FOUR.getValue()); + List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord, MemberLevelEnum.THIRD_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue()); + List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord, MemberLevelEnum.SECOND_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); + + } + + /** + * + * @param mallMembersOlds 高一级别的用户 + * @param LevelParam 当前级别 + * @param amount 补贴金额的基数 + * @param orderNo 订单编号 + * @param memberId 会员id + * @return + */ + public List<MallMember> getStarRecord(List<MallMember> mallMembersOlds,String LevelParam,BigDecimal amount,String orderNo,Long memberId,int starPerkType){ + //根据用户的level获取用户 + List<MallMember> mallMemberStars = memberMapper.selectMemberWithLevel(LevelParam); + if(CollUtil.isNotEmpty(mallMembersOlds)){ + for(MallMember mallMemberOld : mallMembersOlds){ + mallMemberStars.add(mallMemberOld); + } + } + if(CollUtil.isNotEmpty(mallMemberStars)){ + + List<Long> mallMemberStarIds = mallMemberStars.stream().map(MallMember::getId).collect(Collectors.toList()); + //当前等级的总贡献点 + List<MallMemberWallet> mallMemberWallets = mallMemberWalletMapper.selectSumStarByIds(mallMemberStarIds); + Integer starSum = mallMemberWallets.stream().mapToInt(MallMemberWallet::getStar).sum(); + //星级补贴比例 + DataDictionaryCustom starPerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + "AGENT_LEVEL_REQUIRE", + LevelParam); + String starPerkStr = starPerkDic.getValue(); + AgentInfo agentInfo = JSONObject.parseObject(starPerkStr, AgentInfo.class); + BigDecimal profitProp = agentInfo.getProfitProp().abs().divide(new BigDecimal(100)); + //当前等级的星级补贴 + BigDecimal starPerkAmountSum = amount.multiply(profitProp); + //当前等级的每一个贡献点的补贴金额 + BigDecimal starPerkAmountAva = starPerkAmountSum.divide(new BigDecimal(starSum),BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN); + /** + * 给当前等级的每个用户发放星级奖励 + * 生成星级奖励的流水 + */ + if(CollUtil.isNotEmpty(mallMemberWallets)){ + //给当前等级的每个用户发放星级奖励 + int count = 0; + List<Map<String,Object>> result = new ArrayList<>(); + List<MallMoneyFlow> mallMoneyFlows = new ArrayList<>(); + for(MallMemberWallet mallMemberWallet : mallMemberWallets){ + Map<String,Object> hashMap = new HashMap<>(); + Integer starCnt = mallMemberWallet.getStar(); + //当前用户的星级奖励 + 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); + count = count + 1; + if (count % 1000 == 0 || count == mallMemberWallets.size()) { + int updateCount = mallMemberWalletMapper.updateStarByList(result); + if(updateCount>0){ + log.info("============更新============第{}条数据===========",count); + } + //每更新完一批数据,在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(); + } + } + sqlSession.close(); + } + } + return mallMemberStars; + } } diff --git a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java index 6e7dfd5..d3f9dc2 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java +++ b/src/main/java/cc/mrbird/febs/rabbit/constants/QueueConstants.java @@ -10,4 +10,9 @@ public static final String AGENT_AUTO_LEVEL_UP = "hlm_queue_agent_auto_level_up"; public static final String AGENT_RETURN_MONEY = "hlm_queue_agent_return_money"; public static final String ORDER_RETURN_MONEY = "hlm_queue_order_return_money"; + /** + * 补贴金额 , + * 分享补贴,星级补贴 + */ + public static final String PERK_MONEY = "hlm_queue_perk_money"; } diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java index 27a395d..964ac30 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java +++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java @@ -72,4 +72,16 @@ log.error("订单返利异常:", e); } } + + @RabbitListener(queues = QueueConstants.PERK_MONEY) + public void perkMoneyConsumer(String id) { + log.info("收到补贴消息:{}", id); + try { + agentService.perkMoneyConsumer(Long.parseLong(id)); + } catch (Exception e) { + log.error("用户补贴异常", e); + // todo 更新表 + + } + } } diff --git a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java index 0b64030..79ca466 100644 --- a/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java +++ b/src/main/java/cc/mrbird/febs/rabbit/enumerates/RabbitQueueEnum.java @@ -22,7 +22,11 @@ ORDER_RETURN_MONEY("hlm_exchange_order_return_money", "hlm_route_key_order_return_money", - "hlm_queue_order_return_money"); + "hlm_queue_order_return_money"), + + PERK_MONEY("hlm_exchange_perk_money", + "hlm_route_key_perk_money", + "hlm_queue_perk_money"); private String exchange; diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index b0ccf0a..ebd771f 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -18,7 +18,7 @@ username: db_mall_hongloumeng password: hongloumeng123!@#123 driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://47.111.90.145:3306/db_mall_hongloumeng?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8 + url: jdbc:mysql://47.111.90.145:3306/db_mall_hongloumeng?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&rewriteBatchedStatements=true&allowMultiQueries=true # username: db_mall # password: mall!@#123 # driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index a88933d..46b0559 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -18,7 +18,7 @@ username: db_mall_hongloumeng password: hongloumeng123!@#123 driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/db_mall_hongloumeng?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8 + url: jdbc:mysql://127.0.0.1:3306/db_mall_hongloumeng?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&rewriteBatchedStatements=true&allowMultiQueries=true redis: # Redis数据库索引(默认为 0) diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml index 060eb78..7727293 100644 --- a/src/main/resources/mapper/modules/MallMemberMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberMapper.xml @@ -400,4 +400,9 @@ select * from mall_member where level=#{level} </select> + + <select id="selectMemberIdWithLevel" resultType="java.lang.Long"> + select id from mall_member + where level = #{level} + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml index 35bbcb1..966088f 100644 --- a/src/main/resources/mapper/modules/MallMemberWalletMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberWalletMapper.xml @@ -60,4 +60,24 @@ <select id="selectSumCommission" resultType="java.math.BigDecimal"> select ifnull(sum(commission),0) total from mall_member_wallet </select> + + <select id="selectSumStarByIds" resultType="cc.mrbird.febs.mall.entity.MallMemberWallet"> + select * from mall_member_wallet + where member_id IN + <foreach collection = "list" item = "item" separator="," open = "(" close = ")" > + #{item} + </foreach > + </select> + + <update id="updateStarByList" parameterType="java.util.List" > +-- //注意sql语句应被;分隔开,否则批量更新多少条数据就有多少条sql拼在一起。 + <foreach collection="list" item="item" index="index" open="" close="" separator=";"> + update mall_member_wallet + <set> + balance = balance + #{item.starPerkAmount}, + </set> + WHERE id = #{item.id} + </foreach> + </update> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml index 8b00702..4fa7a82 100644 --- a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml +++ b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml @@ -132,4 +132,34 @@ and date_format(created_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d') and type in (2,3,4) </select> + + <insert id="insertMoneyFlow" parameterType="cc.mrbird.febs.mall.entity.MallMoneyFlow"> + insert into mall_money_flow( + REVISION, + CREATED_BY, + CREATED_TIME, + UPDATED_BY, + UPDATED_TIME, + member_id, + amount, + type, + order_no, + rt_member_id, + status, + flow_type) VALUES + ( + #{revision}, + #{createdBy}, + #{createdTime}, + #{updatedBy}, + #{updatedTime}, + #{memberId}, + #{amount}, + #{type}, + #{orderNo}, + #{rtMemberId}, + #{status}, + #{flowType} + ) + </insert> </mapper> \ No newline at end of file diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java index 2530112..8e52d58 100644 --- a/src/test/java/cc/mrbird/febs/ProfitTest.java +++ b/src/test/java/cc/mrbird/febs/ProfitTest.java @@ -42,7 +42,7 @@ @Test public void dynamicProfit() { - memberProfitService.dynamicProfit(21L); + agentService.perkMoneyConsumer(Long.parseLong("571")); } @Test public void agentProfit() { -- Gitblit v1.9.1